我有一个函数,它接受一个参数,除其他外,该参数可以是数据帧或字符串文字。
def func(could_be_df):
if could_be_df=='optionA':data=stuffA()
elif could_be_df=='optionB':data=stuffB()
else:data=get_data(could_be_df)
传递数据帧时,会导致“具有多个元素的数组的真值不明确”错误。我希望 df=='optionA' 解析为 False,因为它显然不是我正在寻找的字符串文字。我如何干净地执行此检查?
我尝试过的东西:
if could_be_df is 'optionA'
。语法警告,听起来使用“is”可能不安全。if isinstance(could_be_df,pd.DataFrame)
。也可以是系列、数组、列表等if isinstance(could_be_df,str)
。可以工作,但会变得混乱,因为除文字之外的字符串仍应转到 get_data。另外,不要鸭子打字。有没有一种干净的、Pythonic 的方法来执行此检查?
IIUC 并按照第三个选项,您可以添加映射器并检查非文字:
def func(could_be_df):
options = {"optionA": stuffA(), "optionB": stuffB()}
if isinstance(could_be_df, str) and could_be_df in options:
data = options[could_be_df]
else: # i.e, DataFrames and non Literals
data = get_data(could_be_df)
# return data ?