我有一个接受参数NBins
的函数。我想用标量50
或数组[0, 10, 20, 30]
调用这个函数。如何在函数中标识NBins
的长度?或者换个说法,如果它是标量还是向量?
我试过这个:
>>> N=[2,3,5]
>>> P = 5
>>> len(N)
3
>>> len(P)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>>
如您所见,我不能将len
应用到P
,因为它不是数组。。。。python中是否有类似于isarray
或isscalar
的内容?
谢谢
将@jamylak和@jpaddison3的答案结合在一起,如果您需要对作为输入的numpy数组保持健壮性,并以与列表相同的方式处理它们,那么应该使用
这对于list、tuple和numpy数组的子类是健壮的。
如果您还想对序列的所有其他子类(不仅仅是列表和元组)保持健壮性,请使用
为什么要用
isinstance
这样做,而不将type(P)
与目标值进行比较?下面是一个例子,我们在这里制作并研究NewList
的行为,它是list的一个平凡的子类。尽管
x
和y
比较相等,但通过type
处理它们会导致不同的行为。然而,由于x
是list
的一个子类的实例,因此使用isinstance(x,list)
可以提供所需的行为,并以相同的方式对待x
和y
。前面的答案假设数组是python标准列表。作为一个经常使用numpy的人,我建议你做一个非常像Python的测试:
要支持任何类型的序列,请选中
collections.Sequence
,而不是list
。注意:
isinstance
也支持类的元组,应该避免检查type(x) in (..., ...)
,这是不必要的。您也可以检查
not isinstance(x, (str, unicode))
相关问题 更多 >
编程相关推荐