python - isinstance 检查是否有任何变量具有特定的类

标签 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 ...

最佳答案

实际上使用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/

相关文章:

python - 用Python读取复杂的文本文件

tkinter - 如何找出小部件的顶级容器?

python-3.5 - 使用pybrain创建网络

Python 3.5 类型化的 NamedTuple 语法产生 SyntaxError

python - 如何引发 tensorflow 内存不足错误的异常?

python - Django 切片查询集中的单个字段

Python pandas 与 lambda 应用难度

python - 从具有相同文件名的两个列表中压缩项目?

python - Matplotlib 和 pandas 中的条形图之间的差异

elasticsearch - aioes 'delete_by_query'方法不起作用