method - ¿Por qué las cadenas de python no tienen la función__iter__?
python generator (2)
¿Cómo es posible que podamos iterar sobre las cadenas de python cuando las cadenas no tienen una función __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>
>>>
Y lo que es más importante (sin embargo, las cadenas están iteradas), ¿por qué las cadenas de pitón no siguen la misma convención que todo lo demás? Particularmente cuando los documentos de Python dicen que la función __iter__
es necesaria http://docs.python.org/library/functions.html#iter ?
Desde su enlace:
o debe ser compatible con el protocolo de secuencia (el método
__getitem__()
con argumentos enteros comenzando en 0).
In [1]: ''foo''.__getitem__(0)
Out[1]: ''f''
Probablemente porque Python no es una lengua que tiene un tipo "char". Lo natural para regresar, si la cadena tuviera __iter__
serían caracteres, pero no hay caracteres. Puedo ver un caso para conectar __iter__
a una cadena y hacer lo que haga la lista (someString), sin estar realmente seguro de por qué no es así.