我有一个函数,如果任何参数是np.ndarray
,则需要采取不同的路线。我正在检查 isinstance
。但我想知道是否有比将列表理解与 any
一起使用更直观(更快)的方法:
def func(a, b):
if any([isinstance(i, np.ndarray) for i in [a, b]]):
...
else:
...
我已经尝试过:
if isinstance([a, b], np.ndarray):
但这不起作用,因为 [a, b]
是一个 list
...
最佳答案
实际上使用any
是最Pythonic的方式,因为它已经在Python中实现,如下所示:
def any(iterable):
for element in iterable:
if element:
return True
return False
并且会在迭代中遇到 True 项后立即返回 True ,因此它的顺序在最好情况下为 O(1),在最坏情况下为 O(n)。关于 isinstance()
,它是一个内置函数,是检查对象类型的 Python 方式。
另外,作为一种更 Pythonic 的方式,您最好将生成器表达式传递给 any
并让生成器函数按需生成项目,而不是列表理解并立即创建所有 bool 值。:
any(isinstance(i, np.ndarray) for i in [a, b])
正如 @Padraic 所说,如果您只处理两个项目,最好的方法是使用 or
运算符:
if isinstance(a, np.ndarray) or isinstance(b, np.ndarray):
# do stuff
关于python - isinstance 检查是否有任何变量具有特定的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35523179/