[英]isinstance check if any of the variables has a certain class
如果有任何参数是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
是最Python的方式,因为它已在python中实现,如下所示:
def any(iterable):
for element in iterable:
if element:
return True
return False
并且在遇到您的可迭代项中的True项后立即返回True
,因此最佳情况下的顺序为O(1),最坏情况下的顺序为O(n)。 关于isinstance()
它是一个内置函数,并且是检查对象类型的Python方法。
另外,作为一种更加Python化的方式,您最好将生成器表达式传递给any
生成器表达式,并让生成器函数按需生成项目,而不是列表理解并立即创建所有布尔值。
any(isinstance(i, np.ndarray) for i in [a, b])
正如@Padraic所说,如果您只处理两个项目,则最好的方法是使用or
运算符:
if isinstance(a, np.ndarray) or isinstance(b, np.ndarray):
# do stuff
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.