Praveen Singh wrote:
In function-

"Default value is *evaluated only once*.This makes different when the
default is a mutable object such as a list, dictionary or instance of most
classes."

I am not getting it properly-evaluated once?? different behaviour???--
please explain this.


Look at an example:


>>> import time
>>> def test(t=time.asctime()):
...     print t, "***", time.asctime()
...
>>> time.sleep(30)  # wait a little bit
>>> test()
Sat Oct 22 04:17:08 2011 *** Sat Oct 22 04:17:57 2011
>>> time.sleep(30)  # wait a little bit longer
>>> test()
Sat Oct 22 04:17:08 2011 *** Sat Oct 22 04:18:46 2011


Notice that the first time printed, using the default value, is the same. The default value for t is assigned once, and not calculated again. Since t is a string, it is immutable and can never change.

The same thing occurs when you use a mutable object like a list or a dict. The default value is assigned once, and once only. But notice that you can modify the default value, say by appending to it:


>>> def test(x=[]):
...     print x, id(x)
...     x.append(1)
...
>>> test()
[] 3085600236L
>>> test()
[1] 3085600236L
>>> test()
[1, 1] 3085600236L


It is the same default list every time, but the *contents* of the list are changing.



--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to