isinstance 检查是否有任何变量具有特定的 class
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
是最 pythonic 的方式,因为它已在 python 中实现,如下所示:
def any(iterable):
for element in iterable:
if element:
return True
return False
并且会 return True
在你的迭代器中遇到一个 True 项目之后,因此它的顺序在最好的情况下是 O(1),在最坏的情况下是 O(n)。关于 isinstance()
,它是一个内置函数,是一种检查对象类型的 pythonic 方法。
此外,作为一种更 pythonic 的方式,您最好将生成器表达式传递给 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
如果任何参数是 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
并且会 return True
在你的迭代器中遇到一个 True 项目之后,因此它的顺序在最好的情况下是 O(1),在最坏的情况下是 O(n)。关于 isinstance()
,它是一个内置函数,是一种检查对象类型的 pythonic 方法。
此外,作为一种更 pythonic 的方式,您最好将生成器表达式传递给 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