Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #64445

Re: Modifying the default argument of function

From Steve Jones <steve@secretvolcanobase.org>
Newsgroups comp.lang.python
Subject Re: Modifying the default argument of function
Date 2014-01-21 19:19 +0000
Organization Aioe.org NNTP Server
Message-ID <20140121191953.6c8dae28@steves-laptop> (permalink)
References <52dec646$0$2934$426a74cc@news.free.fr>

Show all headers | View raw


On Tue, 21 Jan 2014 20:11:02 +0100
Mû <mu--@melix.net> wrote:

> Hi everybody,
> 
> A friend of mine asked me a question about the following code:
> 
> [code]
> def f(x=[2,3]):
>      x.append(1)
>      return x
> 
> print(f())
> print(f())
> print(f())
> [/code]
> 
> The results are [2, 3, 1], [2, 3, 1, 1] and [2, 3, 1, 1, 1].
> 
> 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.
> 
> I'm don't know much about python, does anybody have a simple explanation 
> please?

x is assigned to the list [2, 3] at the time the function is created not when the function is called, meaning that there's only ever 1 list created. When you call x.append this list is modified and the next time the function is called x still refers to this modified list.

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Modifying the default argument of function Mû <mu--@melix.net> - 2014-01-21 20:11 +0100
  Re: Modifying the default argument of function Chris Angelico <rosuav@gmail.com> - 2014-01-22 06:19 +1100
    Re: Modifying the default argument of function Mû <mu--@melix.net> - 2014-01-21 20:36 +0100
      Re: Modifying the default argument of function Chris Angelico <rosuav@gmail.com> - 2014-01-22 06:46 +1100
        Re: Modifying the default argument of function Asaf Las <roegltd@gmail.com> - 2014-01-21 16:30 -0800
  Re: Modifying the default argument of function Steve Jones <steve@secretvolcanobase.org> - 2014-01-21 19:19 +0000
  Re: Modifying the default argument of function emile <emile@fenx.com> - 2014-01-21 11:20 -0800

csiph-web