我们如何测试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

10-02 00:09
查看更多