What is a function parameter =[] for?

BartC bc at freeuk.com
Wed Nov 18 18:14:12 EST 2015


On 18/11/2015 22:11, Ian Kelly wrote:
> On Wed, Nov 18, 2015 at 2:08 PM, fl <rxjwg98 at gmail.com> wrote:
>> Hi,
>>
>> I have tried the below function and find that it can remember the previous
>> setting value to 'val'. I think the second parameter has something on this
>> effect, but I don't know the name and function of '=[]' in this application.
>>
>> Could you explain a little to me?
>> Thanks,
>>
>>
>> def eList(val, list0=[]):
>>      list0.append(val)
>>      return list0
>> list1 = eList(12)
>> list1 = eList('a')
>
> The list0 parameter has a default value, which is [], an initially
> empty list. The default value is evaluated when the function is
> defined, not when it is called, so the same list object is used each
> time and changes to the list are consequently retained between calls.

That is really bizarre behaviour.

So, looking at some source code, a default value for certain types is 
only certain to be that value for the very first call of that function?

 > The default value is evaluated when the function is
 > defined, not when it is called

Given the amount of pointless dynamic stuff that goes on in Python, I'm 
surprised they've overlooked this one!

It seems simple enough to me to check for a missing parameter, and to 
assign whatever default value was designated ([] in this case). (How 
does the default mechanism work now?)

-- 
Bartc




More information about the Python-list mailing list