isinstance检查是否有任何变量具有某个类

时间:2016-02-20 12:22:16

标签: python python-3.5

如果任何参数是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 ...

1 个答案:

答案 0 :(得分:3)

实际上使用any是最pythonic的方式,因为它已经在python中实现,如下所示:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

在迭代中遇到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