Ключевое слово 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? Я не смог найти подробности об этом поведении в документации.