[Python-es] Comportamiento de python.

Guillermo Vaya nadaird en gmail.com
Mie Abr 9 18:16:20 CEST 2014


Quizás me confunda, corregirme si es así, pero la evaluación perezosa[1] es
simplemente no evaluar las expresiones si no hay necesidad, así que no
tengo muy claro que tiene que ver eso con que en Python las funciones sean
objetos y sus argumentos sean parte del estado del objeto, por lo que al
utilizar un tipo de datos mutable genera esta situación [2].

[1] http://en.wikipedia.org/wiki/Lazy_evaluation
[2]
http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument


2014-04-09 17:58 GMT+02:00 Rock Neurotiko <miguelglafuente en gmail.com>:

> No completamente como Haskell, pero si, en algunos casos si :-P
>
> Mi problema en el primer email era que no sabia que se comportaba asi para
> los parámetros, ahora si lo se, y espero que el resto también =D
>
>
> El 9 de abril de 2014, 17:49, Arturo Llaja Alarcón <
> artus.lla en autistici.org> escribió:
>
>  On 09/04/14 10:47, Rock Neurotiko wrote:
>>
>>  Claro, ese es el comportamiento que se espera si conoces cómo funciona
>> Python al asignar los valores.
>>
>> En otros lenguajes, el valor por defecto siempre se evalua (en python
>> solo la primera vez que llamas a ese metodo), por lo que si no le pasas el
>> parametro siempre va a ser el que viene por defecto, por mucho que sea
>> mutable el tipo, ya que evaluan el valor por defecto.
>>
>> Pero, como digo, en Python no es así, y para la gente que no lo sepa
>> (como yo al iniciar el hilo) les puede traer problemas.
>>
>>
>>
>> El 9 de abril de 2014, 17:39, Arturo Llaja Alarcón <
>> artus.lla en autistici.org> escribió:
>>
>>>  On 09/04/14 09:38, Rock Neurotiko wrote:
>>>
>>> x = []
>>>
>>> Pero se lo estás pasando en la línea:
>>> def foo(x = []):
>>>
>>> Según lo que leo, la función crea una variable x, y le asigna un valor
>>> x.append(1), en ningún momento la destruye ni la reinicia.
>>>
>>> La variable x se queda en memoria y por lo tanto al llamar de nuevo la
>>> función foo() se agrega un valor a la lista, recuerda que las listas son
>>> mutables.
>>>
>>> Para que siempre tengas un mismo valor mejor sería usar una tupla:
>>>
>>> def foo(x=()):
>>>     x = (1)
>>>     print(x)
>>>
>>>
>>> foo()
>>> 1
>>>
>>> foo()
>>> 1
>>>
>>> tal como se describe en la resolución de variables locales y globales de
>>> Python.
>>> Es mi observación, salvo mejor opinión,
>>>
>>> _______________________________________________
>>> 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 listPython-es en python.orghttps://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>  Python usa la evaluación perezosa :)
>>
>> Saludos.
>>
>> _______________________________________________
>> 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/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140409/7bf6ba4c/attachment.html>


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