[Tutor] Python function seem to have a memory ???
dman
dsh8290@rit.edu
Sun, 12 Aug 2001 18:36:09 -0400
Others have already explained why it works the way it does, but
haven't given an example of how to get a default argument value of a
new empty list each time the function is called.
On Sat, Aug 11, 2001 at 02:42:50PM -0100, Simon Vandemoortele wrote:
| --- quote ---
| Important warning: The default value is evaluated only once. This makes a
| difference when the default is a mutable object such as a list or dictionary.
| For example, the following function accumulates the arguments passed to it on
| subsequent calls:
|
| def f(a, l = []):
| l.append(a)
| return l
| print f(1)
| print f(2)
| print f(3)
|
| This will print
|
| [1]
| [1, 2]
| [1, 2, 3]
| --- end quote ---
Try
def f( a , l = None ) ;
if l is None :
l = []
l.append( a )
return l
'None' is an immutable object. This means it can't change and will
always be the same. The first thing I do in the function is to see if
'l' has the default value. If it does I create a new local binding to
a new empty list object called 'l'. Then I proceed to modify it and
return it as before. This idiom will have the desired effect.
HTH,
-D