[Python-ideas] Short form for keyword arguments and dicts
Ethan Furman
ethan at stoneleaf.us
Thu Jun 27 03:16:59 CEST 2013
On 06/26/2013 04:15 PM, Joshua Landau wrote:
> On 26 June 2013 16:24, Ethan Furman <ethan at stoneleaf.us> wrote:
>> On 06/26/2013 07:46 AM, Joshua Landau wrote:
>>>
>>> On 26 June 2013 09:04, Ethan Furman <ethan at stoneleaf.us> wrote:
>>>>
>>>> A word doesn't stand out like a character does, plus this usage of pass
>>>> is
>>>> completely different from its normal usage.
>>>>
>>>> We're already used to interpreting '*' as a coin with two sides, let's
>>>> stick
>>>> with it:
>>>>
>>>> def apply_map(map, target, *, frobble): # '*' means frobble is
>>>> keyword
>>>> only
>>>> ...
>>>>
>>>> and later:
>>>>
>>>> frobble = some_funny_stuff_here()
>>>> .
>>>> .
>>>> .
>>>> apply_map(map=kansas, target=toto, *, frobble) # '*' means frobble
>>>> maps
>>>> to keyword frobble
>>>
>>>
>>> Whilst Greg Ewing has made me also much more sympathetic to this view,
>>> I feel that:
>>>
>>> 1) This is nearly unreadable - it does not say what it does in the
>>> slightest
>>
>>
>> And the '*' and '**' in function defintions do?
>
> Yes. The "*" symbol means "unpack" across a very large part of python,
> and the lone "*" was a simple extension to what it already did. There
> was no leap; I could've guessed what it did. It does not mean
> "magically make an object know what its name is and then unpack both
> of those -- implicitly over all of the following args!".
Until recently the '*' meant 'pack' if it was in a function header, and 'unpack' if it was in a function call, and
wasn't usable anywhere else. Now it also means 'unpack' in assignments, as well as 'keywords only after this spot' in
function headers.
Likewise with '**' (except for the assignments part).
I don't know about you, but the first time I saw * and ** I had no idea what they did and had to learn it.
>>> 2) It's added syntax - that's a high barrier. I'm not convinced it's
>>> worth it yet.
>>
>> It is a high barrier; but this does add a bit of symmetry to the new
>> '*'-meaning-keyword-only symbol.
>
> I don't think it does - there's no symmetry as they have completely
> different functions.
Like pack and unpack are completely different? ;)
I see it as:
function header: '*' means only keywords accepted after this point
function call: '*' okay, here's my keywords ;)
>>> 3) It still feels like hackery; I might prefer something explicitly
>>> hackery like this:
>>
>> You'll get used to it. ;)
>
> I bet you I won't :P.
heheh
--
~Ethan~
More information about the Python-ideas
mailing list