我正在检查 Python 中的 str 对象,我意识到 Python 2.7 中的 str 对象既没有__iter__()
方法也没有next()
方法,而在 Python 3.0 中 str 对象有__iter__()
方法,因此它们是可迭代的。但是,我仍然可以使用 str 对象,就好像它们在 Python 2.7 中是可迭代的一样。例如,我可以在 for 循环中使用它们。这是如何运作的?
问问题
1103 次
1 回答
7
简单的答案:因为iter(s)
返回一个可迭代的对象。
更长的答案:iter()
寻找一种__iter__()
方法,但如果找不到,它会尝试自己构造和迭代器。任何支持__getitem__()
从 0 开始的整数索引的对象都可以用来创建一个简单的迭代器。__getitem__()
是列表/字符串索引操作背后的函数,例如s[0]
.
>>> "abc".__iter__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__iter__'
>>> iter("abc")
<iterator object at 0x1004ad790>
>>> iter("abc").next()
'a'
有关详细信息,请参见此处。
于 2012-05-09T04:23:35.967 回答