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