Default Argument Question

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Wed Oct 29 12:43:03 EDT 2008


Paulo J. Matos a écrit :
> Hi all,
> 
> Going through the tutorial brought up a question. Consider the functions:
> 
> def f(a, L=[]):
>     L.append(a)
>     return L
> 
> print f(3)
> print f(9)
> print f(7)
> 
> def f1(i = 0):
>     i = i + 1
>     print i
> 
> f1()
> f1()
> f1()
> f1()
> 
> Since the f accumulates the values in L, I was expecting to see i
> printing 1,2,3,4 but this doesn't happen.
> Can someone please explain why and what is going on beneath the veil?

In the first case, you are mutating L. In the second, you are rebinding 
the local name i. IOW, you are comparing oranges and apples. The 
corresponding code using a list would be:

 >>> def f2(arg, alist=[]):
...     alist = alist + [arg]
...     print alist
...

And it behaves just like your f1 function:

 >>> f2(1)
[1]
 >>> f2(1)
[1]
 >>> f2(1)
[1]
 >>> f2(1)
[1]
 >>>


But anyway: you just couldn't mutate i in f1, since integers are 
immutables...

HTH



More information about the Python-list mailing list