[pyar] Loop infinito con un for
Facundo Batista
facundobatista en gmail.com
Mie Oct 20 13:37:06 ART 2010
2010/10/20 Daniel Moisset <dmoisset en machinalis.com>:
> En el caso del string es equivalente a
>
> a = a + i
>
> Lo que crea un objeto nuevo, y aunque lo asocia a a, el for sigue
> iterando sobre el viejo
>
> En el segundo, a+=i NO ES equivalente a a = a + i. Ni tampoco a a+=i ;
> en vez es equivalente a:
>
> a.extend(i)
Recuerden que Python no traduce realmente "x += 1" como "x = x + 1",
sino que llama a dos métodos especiales distintos, __add__ y __iadd__
[0].
También se puede ver cómo se compila realmente a la VM
>>> def f(x):
... x += 1
...
>>> def g(x):
... x = x + 1
...
>>> import dis
>>> dis.dis(f)
2 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (1)
6 INPLACE_ADD
7 STORE_FAST 0 (x)
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> dis.dis(g)
2 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (1)
6 BINARY_ADD
7 STORE_FAST 0 (x)
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>>
Miren la operación 6, que es distinta.
Slds.
[0] http://docs.python.org/reference/datamodel.html#emulating-numeric-types
--
. Facundo
Blog: http://www.taniquetil.com.ar/plog/
PyAr: http://www.python.org/ar/
More information about the pyar
mailing list