variable & scoping question.
Steven D'Aprano
steven at REMOVE.THIS.cybersource.com.au
Tue Aug 11 02:51:28 EDT 2009
On Mon, 10 Aug 2009 08:46:17 -0700, Cornelius Keller wrote:
> On 10 Aug., 17:12, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
>> Cornelius Keller wrote:
> [snip]
>>
>> http://effbot.org/zone/default-values.htm
>>
>> Diez
>
> Ok thank you.
> I' understand now why.
> I still think this is very confusing, because default values don't
> behave like most people would expect without reading the docs.
Really? How do you expect the default value to behave in this example?
>>> import time
>>> def test(x=time.time()):
... print x
...
>>>
>>> test()
1249972984.33
>>> time.sleep(30)
>>> test()
1249972984.33
You get the same default object each time you call the function, NOT a
fresh one created. I'm sure I'd be terribly confused if Python re-
evaluated the default value each time I called the function.
There's no difference between this and the case x=[], except that lists
are mutable and floats aren't. You get the same default list each time,
it just has different stuff in it. The alternative would be to get a
different list each time, and that would require re-evaluating the
default each time the function was called, which is horrible.
--
Steven
More information about the Python-list
mailing list