[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