def X(l=[]): weirdness. Python bug ?

Bart van Deenen bart at at.vandeenensupport.punt.com.invalid
Fri Aug 22 05:41:18 EDT 2008


Hi 

Thanks all for your answers. I figured your solution already, but now I understand where the behavior is from. One question remains: can I find my parameter 'l' somewhere? I looked in a lot of objects, but couldn't find it.

Thanks

Bart.

cokofreedom at gmail.com wrote:

> On Aug 22, 11:13 am, Bart van Deenen
> <b... at at.vandeenensupport.punt.com.invalid> wrote:
>>
>> # function
>> def X(l=[]):
>> l.append(1)
>> print l
>>
>> # first call of X
>> X()
>> [1]
>>
>> #second call of X
>> X()
>> [1, 1]
>>
>> Where does the list parameter 'l' live between the two successive calls
>> of X(). Why is it not recreated with an empty list?
>> Is this correct behavior or is it a Python bug?
>> Does anyone have any pointers to the language documentation where this
>> behavior is described?
>>


> "Default parameter values are evaluated when the function definition
> is executed."
> 
> Depending on your use the common way to handle this is to do
> 
> def x(lst = None):
>     if lst is None:
>         pass # lst has not been set to anything
>     else:
>         pass # lst has been set to something



More information about the Python-list mailing list