簡體   English   中英

是否可以將參數解包操作符(也稱為splash操作符)實現為函數?

[英]Is it possible to implement the argument unpacking operators (aka splash operators) as a function?

場景:

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

我疲憊的頭腦可以解決的唯一解決方案是扭轉整個混亂,如:

def unpack(f, kwargs):
    return f(**kwargs)

unpack(test, kwargs)
>> 1, 2

至於原因:沒有迫切需要。 但是,一般來說,如果一個unpack功能是可行的,我想知道是出於好奇。

不,這是不可能的。 參數解包是調用語法的一部分,而不是生成參數的表達式。

Python解析器和編譯器將語法轉換為專用字節碼。 如果沒有那些,函數將無法復制將對象解包為參數所做的工作。

而是生成位置參數列表和關鍵字參數字典,並始終應用這些,即使是空的:

def update_kwargs(kwargs):
    # update the dictionary

args, kwargs = [], {}
update_kwargs(kwargs)
test(*args, **kwargs)

*args的空列表或**kwargs空字典只會導致根本不應用任何參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM