为什么Python字符串没有__iter__方法?
为什么我们可以在Python字符串上进行循环,而字符串并没有提供一个__iter__
方法呢?
$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> "asdf".__iter__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__iter__'
>>> it = iter("asdf")
>>> it
<iterator object at 0xb736f5ac>
>>>
根据我从文档中了解到的,进行循环是需要一个__iter__
方法的。那为什么Python的字符串不遵循这个规则呢?它们是怎么做到可以进行循环的呢?
2 个回答
-1
可能是因为Python没有“字符”这种类型。通常来说,如果字符串有__iter__
这个功能,返回的应该是字符,但实际上并没有字符这个概念。我能理解把__iter__
和字符串连接起来,让它的行为像列表那样(比如用列表来处理某个字符串),但我不太明白为什么不是这样做。
40
根据你提供的链接:
或者它必须支持序列协议(也就是要有一个叫做
__getitem__()
的方法,这个方法需要接受从0开始的整数作为参数)。
In [1]: 'foo'.__getitem__(0)
Out[1]: 'f'