[Python-ideas] Default arguments in Python - the return - running out of ideas but...

Pascal Chambon chambon.pascal at wanadoo.fr
Wed May 13 23:09:27 CEST 2009


Greg Falcon a écrit :
> Notice that
>
> def foo():
>     def myfunc(a, b, c = (yield [])):
>         pass
>
> already has a meaning in Python.  Under your proposal,
>
>   
Aowh... I didn't even think this was legal, but indeed this works... so 
it's obviously dead for "yield".

> Anyhow, since you've decided you want add a new kind of default
> argument spelled differently than the standard one, I have to ask what
> this buys you beyond
>
> def foo():
>     def myfunc(a, b, c = None):
>         if c is not None: # or a setinel
>             c = []
>
> Sure, it takes two more lines of code to write this (three if you want
> to use an object() instance as your sentinel to allow None being
> passed in), but does not require a new bit of language syntax for
> every Python programmer to learn...
>
> Greg F
>
>   
Well, not only do we have to write more code, but we lose in 
self-documentation I guess (I'd rather have the default appearing in the 
signature than in the function code - pydoc and stuffs won't notice it), 
and I find slightly disappointing the principle of a "sentinel", i.e "I 
would have wanted to do something there but I can't so I'll do it 
farther, take that in the meantime".

> There's the suggestion that Carl Johnson gave:
>
>     def myfunc(a, b, c else []):
>         pass
>
> or there's:
>
>     def myfunc(a, b, c def []):
>         pass
>
> where 'def' stands for 'default' (or "defaults to").
Those phrases could do it, I'm just worryied about the fact that 
semantically, they make (to me) no difference with "c = []".
None of those ways looks more "dynamic" than teh other, so it might be 
hard to explain why "=" means compiel time, and "def" means runtime.

I must admit I'm totally out of ideas then.

Regards,
Pascal







More information about the Python-ideas mailing list