Excerpts from Marc Aymerich's message of Sun Jun 26 14:28:30 -0400 2011: > Hi, > I'm trying to define a function that has an optional parameter which > should be an empty list whenever it isn't given. However, it takes as > value the same value as the last time the function was executed. What > is the reason of this behaviour? How does python deal with default > values (i.e. when are they assigned/created)? > > Thanks :) >
Really common mistake, I made it myself too. When Python evaluates the
function, it sees the default parameter of `foo' as the new object you
create with []. It keeps that object around. The proper idiom instead of
> >>> def a(foo=[]):
> ... foo.append(1)
> ... print foo
> ...
is
def a(foo=None):
if foo is None:
foo = []
foo.append(1)
print foo
--
Corey Richardson
"Those who deny freedom to others, deserve it not for themselves"
-- Abraham Lincoln
signature.asc
Description: PGP signature
-- http://mail.python.org/mailman/listinfo/python-list
