Hello
I stumbled on something I found surprising. I'm using standard python (cpython, I guess) 2.7 on openSuse 13.1.

Consider the function

In [2]: def f(x,y=[]):
   ...:     print y
   ...:     y.append(x)
   ...:     return x

This is the output of repeated calls to this function:

In [3]: f(1)
[]
Out[3]: 1
In [4]: f(2)
[1]
Out[4]: 2
In [5]: f(3)
[1, 2]
Out[5]: 3

So, the function seems to keep the value of the optional argument y over repeated calls. I was expecting that the optional argument, if not set explicitly in the calling command, would always assume the default value (the empty list), at every call.

I guess it has something to do with the mutability of the optional argument (in this case, a list), because it works as I expect if the optional argument is an int, for instance:

In [8]: def g(x,y=0):
   ...:     print y
   ...:     y += x
   ...:     return x
   ...:

In [9]: g(1)
0
Out[9]: 1
In [10]: g(2)
0
Out[10]: 2

(No memory of previous calls to the function.)
Is there a rationale for this behavior?
Thanks for any help,
Ze
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to