将@jamylak和@ jpaddison3的答案结合在一起,如果您需要对作为输入的numpy数组保持鲁棒性,并以与列表相同的方式处理它们,则应使用
import numpy as np
isinstance(P, (list, tuple, np.ndarray))
对于list,tuple和numpy数组的子类,这是可靠的。
而且,如果您还想对序列的所有其他子类(不仅是列表和元组)具有鲁棒性,请使用
import collections
import numpy as np
isinstance(P, (collections.Sequence, np.ndarray))
为什么要用这种方法isinstance
而不是type(P)
与目标值进行比较?这是一个示例,我们制作并研究NewList
list的一个琐碎子类的行为。
>>> class NewList(list):
... isThisAList = '???'
...
>>> x = NewList([0,1])
>>> y = list([0,1])
>>> print x
[0, 1]
>>> print y
[0, 1]
>>> x==y
True
>>> type(x)
<class '__main__.NewList'>
>>> type(x) is list
False
>>> type(y) is list
True
>>> type(x).__name__
'NewList'
>>> isinstance(x, list)
True
尽管x
和y
比较平等,通过处理它们type
会导致不同的行为。然而,由于x
是的子类的实例list
,使用isinstance(x,list)
得到所需的行为和治疗x
和y
以相同的方式。
type
?