Modifying the default argument of function

mu-- at melix.net
Tue Jan 21 14:36:19 EST 2014


Le 21/01/2014 20:19, Chris Angelico a écrit :
> On Wed, Jan 22, 2014 at 6:11 AM, Mû <mu-- at melix.net> wrote:
>> The function acts as if there were a global variable x, but the call of x
>> results in an error (undefined variable). I don't understand why the
>> successive calls of f() don't return the same value: indeed, I thought that
>> [2,3] was the default argument of the function f, thus I expected the three
>> calls of f() to be exactly equivalent.
>
> In a sense, there is. The default for the argument is simply an object
> like any other, and it's stored in one place.
>
> For cases where you want a mutable default that is "reset" every time,
> the most common idiom is this:
>
> def f(x=None):
>      if x is None: x=[2,3]
>      x.append(1)
>      return x
>
> That will create a new list every time, with the same initial contents.
>
> ChrisA
>

Thank you, thanks everybody,

These were clear and quick answers to my problem. I did not think of 
this possibility: the default argument is created once, but accessible 
only by the function, therefore is not a global variable, whereas it 
looks like if it were at first glance.

-- 
Mû


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com




More information about the Python-list mailing list