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