Op 20-11-15 om 01:27 schreef Ned Batchelder: > On Thursday, November 19, 2015 at 7:11:52 PM UTC-5, BartC wrote: >> On 19/11/2015 22:55, Michael Torrie wrote: >>> On 11/19/2015 02:21 PM, BartC wrote: >>>> (Python returns 42; so that means my languages are more dynamic than >>>> Python? That's hard to believe!) >>> >>> It tells me your language does late binding for default arguments, which >>> does mean the default argument can dynamically change at call time, >>> which would surprise me if I didn't know about it. Either form of >>> binding is acceptable, and I don't think it makes a language more or >>> less dynamic. >> >> You get the expression that is specified, which can give different >> values at different times unless it involves only constants. >> >> It can't be exactly the same as writing an identical expression in place >> of the missing argument, as apparently different scopes come into play >> if names are involved. >> >> However I mainly use them for constant values. And [] is a constant >> value in my opinion. >> >> -- >> Bartc > > You are not alone in being surprised by how mutable default values work. > It is a topic that comes up in every "What's Bad About Python" discussion, > and is a common question from new users of the language. > > I can understand how you would view [] as a constant value. It's true that > it is an expression that produces a consistent value each time it is > evaluated. But that value is a list, and lists are mutable. The examples > here all use the .append() method on that value, which changes it.
I think that part of the problem is, that [] is not a constant object. So that when you see a line like ls = [] It behaves more lke ls = [].copy() than what you would expect with the normal python semantics. -- Antoon -- https://mail.python.org/mailman/listinfo/python-list