[Python-Dev] Arbitrary non-identifier string keys when using **kwargs
Serhiy Storchaka
storchaka at gmail.com
Thu Oct 4 05:18:43 EDT 2018
04.10.18 11:56, Steven D'Aprano пише:
> While keyword arguments have to be identifiers, using **kwargs allows
> arbitrary strings which aren't identifiers:
>
> py> def spam(**kwargs):
> .... print(kwargs)
> ....
> py> spam(**{"something arbitrary": 1, '\n': 2})
> {'something arbitrary': 1, '\n': 2}
>
>
> There is some discussion on Python-Ideas on whether or not that
> behaviour ought to be considered a language feature, an accident of
> implementation, or a bug.
>
> Can we get some guidence on this please?
This is an implementation detail. Currently CPython doesn't ensure that
keyword argument names are identifiers for performance reasons. But this
can be changed in future versions or in other implementations.
More information about the Python-Dev
mailing list