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
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to