Default values for arguments

Possible Duplicate:
“Least Astonishment” in Python: The Mutable Default Argument

Consider the following function:

def foo(L = []):
  L.append(1)
  print L

Each time I call foo it will print a new list with more elements than previous time, eg:

>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]

Now consider the following function:

def goo(a = 0):
  a += 1
  print a

When invoking it several times, we get the following picture:

>>> goo()
1
>>> goo()
1
>>> goo()
1

ie it does not print a larger value with every call.

What is the reason behind such seemingly inconsistent behavior?
Also, how is it possible to justify the counter-intuitive behavior in the first example, why does the function retain state between calls?


The default arguments are evaluated once when the function is defined. So you get the same list object each time the function is called.

You'll also get the same 0 object each time the second function is called, but since int is immutable, when you add 1 as fresh object needs to be bound to a

>>> def foo(L = []):
...   print id(L)
...   L.append(1)
...   print id(L)
...   print L
... 
>>> foo()
3077669452
3077669452
[1]
>>> foo()
3077669452
3077669452
[1, 1]
>>> foo()
3077669452
3077669452
[1, 1, 1]

vs

>>> def foo(a=0):
...   print id(a)
...   a+=1
...   print id(a)
...   print a
... 
>>> foo()
165989788
165989776
1
>>> foo()
165989788
165989776
1
>>> foo()
165989788
165989776
1
链接地址: http://www.djcxy.com/p/4886.html

上一篇: 如何让Python等待输入?

下一篇: 参数的默认值