Re: [pyar] Loop infinito con un for

Página superior
Adjuntos:
+ (text/plain)
Eliminar este mensaje
Responder a este mensaje
Autor: Facundo Batista
Fecha:  
A: Python Argentina
Asunto: Re: [pyar] Loop infinito con un for
2010/10/20 Daniel Moisset <>:

> 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/
_______________________________________________
pyar mailing list
http://listas.python.org.ar/listinfo/pyar

PyAr - Python Argentina - Sitio web: http://www.python.org.ar/