Non-identifiers in dictionary keys for **expression syntax

Matthew Gilson m.gilson1 at gmail.com
Thu May 23 16:49:19 EDT 2013


On 05/23/2013 03:20 PM, Neil Cerutti wrote:
> On 2013-05-23, Matthew Gilson <m.gilson1 at gmail.com> wrote:
>> That's fine, but what is a keyword argument?  According to the glossary
>> (http://docs.python.org/3.3/glossary.html):
>>
>> /"keyword argument/: an argument preceded by an identifier (e.g. name=)
>> in a function call or passed as a value in a dictionary preceded by **."
>>
>> As far as I'm concerned, this leads to some ambiguity in
>> whether the keys of the mapping need to be valid identifiers or
>> not.
> I don't see any ambiguity. A keyword argument is an argument
> preceded by an identifier according to the definition. Where are
> you perceiving wiggle room?
>
The wiggle room comes from the "or passed as a value in a dictionary" 
clause.  We sort of get caught in a infinite loop there because the 
stuff that can be passed in a dictionary is a keyword which is an 
identifer=expression or something passed as a value in a dictionary ...

Also the fact that:

      func(**{"foo bar baz":1})

works even though `foo bar baz` isn't a valid identifier, but:

      func(**{1:3})

doesn't work.



More information about the Python-list mailing list