为什么Python字符串没有__iter__方法?

24 投票
2 回答
3446 浏览
提问于 2025-04-16 12:30

为什么我们可以在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'

撰写回答