[Python-es] Comportamiento de python.

Arturo Llaja Alarcón artus.lla en autistici.org
Mie Abr 9 15:44:31 CEST 2014


On 08/04/14 16:58, Da?id wrote:
>
> Por cierto, si usas eso en código y lo analizas con pylint, te avisa 
> de que eso es un imán para bugs. Suele ser una buena idea pasarlo de 
> vez en cuando, aunque no siempre haya que hacerle caso...
>
> On Apr 8, 2014 11:41 PM, "Jose Caballero" <jcaballero.hep en gmail.com 
> <mailto:jcaballero.hep en gmail.com>> wrote:
>
>     es una de esas cosas casi imposibles de encontrar en google (las key
>     words son o demasiado genericas o demasiado especificas).
>
>
>     El día 8 de abril de 2014, 12:08, Rock Neurotiko
>     <miguelglafuente en gmail.com <mailto:miguelglafuente en gmail.com>>
>     escribió:
>     > Vale...
>     > Juro que busqué en Google, pero no lo encontré XD
>     > Gracias! =D
>     >
>     >
>     > El 8 de abril de 2014, 21:06, Jose Caballero
>     <jcaballero.hep en gmail.com <mailto:jcaballero.hep en gmail.com>>
>     > escribió:
>     >
>     >>
>     >>
>     https://docs.python.org/3/tutorial/controlflow.html#default-argument-values
>     >>
>     >>
>     >>
>     >> El día 8 de abril de 2014, 12:02, Rock Neurotiko
>     >> <miguelglafuente en gmail.com <mailto:miguelglafuente en gmail.com>>
>     escribió:
>     >> > Muy buenas,
>     >> >
>     >> > Hace bastante que no escribo, pero hoy me he encontrado por
>     reddit con
>     >> > un
>     >> > articulo en el que comenta una cosa de python, y no entiendo
>     >> > perfectamente
>     >> > que es lo que ocurre, asi que os pregunto, a ver si alguien
>     sabe porqué
>     >> > sucede :-)
>     >> >
>     >> > El codigo es este:
>     >> >
>     >> > def foo(x = []):
>     >> >     x.append(1)
>     >> >     print(x)
>     >> >
>     >> > foo()
>     >> > foo()
>     >> > foo()
>     >> > [...]
>     >> >
>     >> > Recomiendo ejecutar, ya que el resultado es soprendente (a no
>     ser que
>     >> > entiendas perfectamente como funciona python, o ya te hayas
>     cruzado con
>     >> > esto
>     >> > XD)
>     >> >
>     >> > Y ahora mi pregunta: ¿Porqué sucede esto?
>     >> > Sé que tiene algo que ver con que Python al ejecutar la
>     funcion la
>     >> > recorre
>     >> > buscando las variables que vaya a usar, y las guarda en el
>     scope, en el
>     >> > primer caso x viene del parametro (que seria []).
>     >> > Como en python todo es un objeto, la llamada a foo() se queda
>     como
>     >> > "instanciado", por lo que las siguientes ejecuciones, al
>     buscar "x" la
>     >> > encuentra.
>     >> >
>     >> > No se si me explico, tampoco se si es eso, lo cierto es que estoy
>     >> > bastante
>     >> > confuso con esto XD
>     >> >
>     >> > Un saludo!
>     >> >
>     >> >
>     >> > --
>     >> > Miguel García Lafuente - Rock Neurotiko
>     >> >
>     >> > Do it, the devil is in the details.
>     >> > The quieter you are, the more you are able to hear.
>     >> > Happy Coding. Code with Passion, Decode with Patience.
>     >> > If we make consistent effort, based on proper education, we
>     can change
>     >> > the
>     >> > world.
>     >> >
>     >> > El contenido de este e-mail es privado, no se permite la
>     revelacion del
>     >> > contenido de este e-mail a gente ajena a él.
>     >> >
>     >> > _______________________________________________
>     >> > Python-es mailing list
>     >> > Python-es en python.org <mailto:Python-es en python.org>
>     >> > https://mail.python.org/mailman/listinfo/python-es
>     >> > FAQ: http://python-es-faq.wikidot.com/
>     >> >
>     >> _______________________________________________
>     >> Python-es mailing list
>     >> Python-es en python.org <mailto:Python-es en python.org>
>     >> https://mail.python.org/mailman/listinfo/python-es
>     >> FAQ: http://python-es-faq.wikidot.com/
>     >
>     >
>     >
>     >
>     > --
>     > Miguel García Lafuente - Rock Neurotiko
>     >
>     > Do it, the devil is in the details.
>     > The quieter you are, the more you are able to hear.
>     > Happy Coding. Code with Passion, Decode with Patience.
>     > If we make consistent effort, based on proper education, we can
>     change the
>     > world.
>     >
>     > El contenido de este e-mail es privado, no se permite la
>     revelacion del
>     > contenido de este e-mail a gente ajena a él.
>     >
>     > _______________________________________________
>     > Python-es mailing list
>     > Python-es en python.org <mailto:Python-es en python.org>
>     > https://mail.python.org/mailman/listinfo/python-es
>     > FAQ: http://python-es-faq.wikidot.com/
>     >
>     _______________________________________________
>     Python-es mailing list
>     Python-es en python.org <mailto:Python-es en python.org>
>     https://mail.python.org/mailman/listinfo/python-es
>     FAQ: http://python-es-faq.wikidot.com/
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
He probado la función que describes y el resultado es:

def foo(x = []):
     x.append(1)
     print(x)

foo()
[1]

foo()
[1, 1]

foo()
[1, 1, 1]

¿Es lo esperado no?
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140409/4d797276/attachment.html>


Más información sobre la lista de distribución Python-es