What is a function parameter =[] for?

BartC bc at freeuk.com
Thu Nov 19 13:19:26 EST 2015


On 19/11/2015 17:45, Chris Angelico wrote:
> On Fri, Nov 20, 2015 at 4:30 AM, BartC <bc at freeuk.com> wrote:
>> The whole concept of 'mutable' default is alien to me. A default is just a
>> convenient device to avoid having to write:
>>
>>    fn(0) or fn("") or fn([])
>>
>> You just write fn() instead. But it shouldn't come at the cost of completely
>> different semantics! Because then it can't really be called a default value
>> at all.
>>
>
> Do you understand the concept of "mutable objects"? Don't even try to
> discuss mutable function defaults until you do.

Yes. In the languages I create, pretty much everything is mutable, 
provided it can supply an l-value. Constructs such as those for empty 
lists ([] in Python, () in mine) aren't l-values.

But it doesn't apply default values. The language is very different 
however, because the byte-code compiler always has full knowledge of 
functions that are called directly. Then it knows when an argument is 
omitted, and can simply substitute the expression used as the default.

> If your language simply has no mutable objects, then sure, it's easy
> to understand function defaults! There's no such thing as early or
> late binding; in fact, you can even super-late-bind, where you don't
> actually call a function until its *return value* is being used (as
> long as that function has no side effects). But as soon as objects are
> capable of retaining their identities while changing their values, you
> need an object model that (a) distinguishes between identity and
> value, and (b) allows some definition of early or late binding,
> because it *will* matter.
>
>> if you write A=B then something of B needs to have been copied into
>> A, even if it's just the reference that B contains. Otherwise it would be
>> difficult to get A to refer to the same object as B.
>
> Please, PLEASE, go and read/watch Ned's PyCon talk (the one I linked
> you to earlier). Don't post another word on this subject until you
> comprehend what he is saying.

I looked through the long article (I don't remember seeing a link to a 
video), and followed it up to about 3/4 of the way through, then it got 
a bit heavy.

But what is it about my remarks above that isn't right?

-- 
Bartc



More information about the Python-list mailing list