我们如何测试x是否像list/tuple一样呱呱叫?
我的意思是,我们可以用0和1(等)对它进行子集,尽管它不能是字符串(也可以是子集)。
我想测试一下hasattr(X, '__iter__')
和not isinstance(X, str)
,但这意味着字典仍然可以通过,而我不希望它通过你也可以测试它不是一本字典,但我不确定是否有听写的子类等等。
在这个简单的规范下,有没有更正式的方法来测试像list或tuple这样的东西?
例如,允许的输入应为:
'emailaddr' --> ('emailaddr', 'emailaddr')
('emailaddr', 'alias')
['emailaddr', 'alias']
SequenceThing('emailaddr', 'alias')
最佳答案
是否要检查值是否为asequence?
一种iterable,它支持通过getitem()特殊方法使用整数索引进行有效的元素访问,并定义一个len()方法,该方法返回序列的长度一些内置的序列类型是list、str、tuple和bytes注意,dict还支持getitem()和len(),但被认为是映射而不是序列,因为查找使用任意不可变键而不是整数。
旧方法(2.7中已弃用):
import operator
print operator.isSequenceType(x)
新方法:
import collections
print isinstance(x, collections.Sequence)
它们并不等同于后者,后者更精确,但自定义类型需要与it一起registered。
而且,根据这两个定义,字符串都是序列您可能需要特别治疗
basestring
。