e-mail address change (was Re: [Tutor] python's default argumentvalue handling in functions - weird syntax? problem grappling withthe concept)

Alan Gauld alan.gauld at freenet.co.uk
Thu Feb 10 09:14:04 CET 2005

> >def f(a,L=[]):
> >    if L==[5]:
> >        print 'L==[5] caught'
> >        print L
> >        print 'resetting L...'
> >        L=[]
> >    L.append(a)
> >    return L
> >
> >
> >###
> >
> Now I'm dizzy... I can't understand why there are two "L"!
> L is a local variable of the function, right?

L is a parameter if the function with a default value.
That means its a special type of local variable that
has a life outside the function. But while inside the
function it acts just like a local variable.

> anything else) Then if I reassign L to something, why doesn't it
> that change till next run?

Because local variables die and their contents are garbage
collected at the end of the function. L goes back to its
external life which points at the original default L.

> so it should keep the reassignation, no?

No, the whole point of this thread is that Python, as
the documentation said, only evaluates the default
value once, at function definition time, you *cannot*
change it. After each function invocation all local
changes are lost and it reverts to the ioriginal value.

Alan G.

More information about the Tutor mailing list