场景:
kwargs = dict(a=1, b=2)
def test(a=None, b=None): return a, b
def unpack(kwargs):
...
return whatever
test(unpack(kwargs)) # instead of test(**kwargs)
>> 1, 2
Run Code Online (Sandbox Code Playgroud)
我疲惫的头脑可以解决的唯一解决方案是扭转整个混乱,如:
def unpack(f, kwargs):
return f(**kwargs)
unpack(test, kwargs)
>> 1, 2
Run Code Online (Sandbox Code Playgroud)
至于原因:没有迫切需要.但unpack总的来说,我想知道一个功能是否可行是出于好奇.
不,这是不可能的.参数解包是调用语法的一部分,而不是生成参数的表达式.
Python解析器和编译器将语法转换为专用字节码.如果没有那些,函数将无法复制将对象解包为参数所做的工作.
而是生成位置参数列表和关键字参数字典,并始终应用这些,即使是空的:
def update_kwargs(kwargs):
# update the dictionary
args, kwargs = [], {}
update_kwargs(kwargs)
test(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
对于空单*args或空字典**kwargs都被应用只会导致没有参数.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |