Ключевое слово varargs с недопустимыми именами переменных

Все мы знаем функцию varargs Python:

def f(*args, **kwargs):
    print(args, kwargs)

f(1, 2, foo='bar') # output: (1, 2) {'foo': 'bar'}

kwargs= {'a': None}
f(**kwargs) # output: () {'a': None}

Но недавно я обнаружил, что в качестве ключей можно использовать строки, которые не являются допустимыми именами переменных, например:

kwargs= {'name with spaces': None, '%^+': None}
f(**kwargs) # output: () {'name with spaces': None, '%^+': None}

Но это не значит, что проверка ошибок не происходит, например, если вы попытаетесь

f(**{1: None})

ты получишь TypeError: f() keywords must be strings,

Так что теперь мне интересно, действительно ли это правильный Python или, может быть, просто деталь реализации CPython? Я не смог найти подробности об этом поведении в документации.

0 ответов

Другие вопросы по тегам