[Python-es] Comportamiento de python.

Rock Neurotiko miguelglafuente en gmail.com
Mie Abr 9 16:38:02 CEST 2014


En principio no debería serlo, a no ser que sepas cómo se comporta Python
en el aspecto de asignar valores a variables no referenciadas (el link Jose
lo explica).

Si no lo sabes, el comportamiento que crees que debería tener es [1] para
cada llamada, ya que a cada llamada "debería" asignar el valor por defecto
a x, ya que en ningún momento se lo pasas.

Si sabes cómo se comporta, es lo esperado, aun asi, como dice David, pylint
te avisa por todos los lados, mejor asignar siempre variables a datos
inmutables :-)


El 9 de abril de 2014, 15:44, Arturo Llaja Alarcón
<artus.lla en autistici.org>escribió:

>  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>
> 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> 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>
>> > 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> 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
>> >> > 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/
>> >
>> >
>> >
>> >
>> > --
>> > 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
>> > 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/
>>
>
>
> _______________________________________________
> Python-es mailing listPython-es en python.orghttps://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?
>
> _______________________________________________
> Python-es mailing list
> 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.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140409/01fe9261/attachment.html>


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