En este ejemplo, lo que ocurre es que como ya ha evaluado el valor por
defecto, y sabe en que direccion de memoria está, no vuelve a evaluarlo
porque no lo necesita, ya sabe donde está el resultado de esa operación.

Esto también ocurre en la evaluacion perezosa (no es todo lo que abarca la
evaluacion perezosa, pero si una de las consecuencias)

Por ejemplo, si en haskell usas [ x  |  x<-[1..200],  x `mod` 2 == 0 ]
(ejemplo tonto), si lo vuelves a intentar usar, haskell sabe que ya lo
tiene, por lo que no lo vuelve a ejecutar.


El 9 de abril de 2014, 18:16, Guillermo Vaya <[email protected]> escribió:

> 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 <[email protected]>:
>
> 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 <
>> [email protected]> 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 <
>>> [email protected]> 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
>>>> [email protected]
>>>> 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 
>>> [email protected]https://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
>>> [email protected]
>>> 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
>> [email protected]
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
> _______________________________________________
> Python-es mailing list
> [email protected]
> 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
[email protected]
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a