是否可以将参数解包操作符(也称为splash操作符)实现为函数?

Don*_*ion 4 python

场景:

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总的来说,我想知道一个功能是否可行是出于好奇.

Mar*_*ers 6

不,这是不可能的.参数解包是调用语法的一部分,而不是生成参数的表达式.

Python解析器和编译器将语法转换为专用字节码.如果没有那些,函数将无法复制将对象解包为参数所做的工作.

而是生成位置参数列表和关键字参数字典,并始终应用这些,即使是空的:

def update_kwargs(kwargs):
    # update the dictionary

args, kwargs = [], {}
update_kwargs(kwargs)
test(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

对于空单*args或空字典**kwargs都被应用只会导致没有参数.