By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,587 Members | 1,677 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,587 IT Pros & Developers. It's quick & easy.

Default Argument Question

P: n/a
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?

Cheers,

--
Paulo Jorge Matos - pocmatos @ gmail.com
Oct 29 '08 #1
Share this Question
Share on Google+
1 Reply


P: n/a
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
Oct 29 '08 #2

This discussion thread is closed

Replies have been disabled for this discussion.