令我惊讶的是,我注意到,在函数调用中,我可以用字符串that weren't even valid python identifiers解包dict
.
令我惊讶的是,参数名必须是标识符,因此允许函数调用解包具有非标识符的**kwargs
,并且没有运行时错误,这似乎不太健康(因为这可能会将问题埋得更深,而不会埋在实际发生的地方).
除非有一个实际的use人能够做到这一点,在这种情况下,我的问题变成"那有什么用?".
示例代码
考虑此功能:
def foo(**kwargs):
first_key, first_val = next(iter(kwargs.items()))
print(f"{first_key=}, {first_val=}")
return kwargs
这表明,在函数调用中,您无法解包具有整数键的dict
,这是预期的.
>>> t = foo(**{1: 2, 3: 4})
TypeError Traceback (most recent call last)
...
TypeError: foo() keywords must be strings
另一方面,令人意外的是,您可以用字符串键解包dict
,即使它们不是有效的python标识符:
>>> t = foo(**{'not an identifier': 1, '12': 12, ',(*&$)': 100})
first_key='not an identifier', first_val=1
>>> t
{'not an identifier': 1, '12': 12, ',(*&$)': 100}