Puzzling: local variable in recursive function made global?

Peter Otten __peter__ at web.de
Thu Mar 26 14:29:48 EDT 2009


andrew cooke wrote:

> Diez B. Roggisch wrote:
>> That's not a local variable, that is a default argument. Which is in
>> fact only created once for each function, yes.
>>
>> http://effbot.org/pyfaq/why-are-default-values-shared-between-objects.htm
> 
> a nice way of handling this was posted here just yesterday, which isn't in
> the ffbot page (afaik):
> 
>   def function(listvar=None):
>     # None will force use of empty list here:
>     for x in listvar or []:
>       # Do soemthing with contents here
> 
> or just
> 
>   def function(listvar=None):
>     listvar = listvar or []
>     ...
> 
> although the "if arg is None..." is pretty standard python that makes it
> clear exactly what you are doing.

Plus, it works as expected (read: modifies the argument) if you explicitly
pass an empty list to the function...

Peter



More information about the Python-list mailing list