def X(l=): weirdness. Python bug ?
Bart van Deenen
bart at at.vandeenensupport.punt.com.invalid
Fri Aug 22 11:41:18 CEST 2008
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.
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=):
>> print l
>> # first call of X
>> #second call of 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
> pass # lst has been set to something
More information about the Python-list