2016-09-16 93 views
0

我知道這是一種常見的情況,人們可以使用**kwargs給任意數量的kwargs函數,然後以字典的形式訪問它們;不過,我想明確指定我的函數kwargs,但仍然可以作爲字典訪問它們。如何在Python函數中獲取命名參數的字典

這是因爲我希望我的函數只接收特定的kwargs,但我需要對它們進行相同的操作,我可以將它們放入for循環中。

def my_func(kwarg1=None, kwarg2=None, kwarg3=None): 
    kwargs = {} # After somehow getting all my kwargs into a dictionary 

    for k in kwargs: 
     # Do my operation 

我做希望我的函數接收的kwargs任意數字,但我要訪問我的字典kwargs

回答

0

簡單地創建一個正常的字典,檢索每個參數的值。

def my_func(kwarg1=None, kwarg2=None, kwarg3=None): 
    kwargs = {'kwarg1':kwarg1, 'kwarg2':kwarg2, 'kwarg3':kwarg3} 

    for k in kwargs: 
     # Do my operation 
+0

我不敢相信我沒有想到這一點。我雖然有更好的方法。謝謝。 – 99lives

1

假設你有沒有位置參數,你可以通過locals訪問您kwargs,如果你把它放在你的函數的頂部:

def my_func(kwarg1=None, kwarg2=None, kwarg3=None): 
    # Don't add any more variables before the next line! 
    kwargs = dict(locals()) 

    for k in kwargs: 
     # Do my operation 

這是哈克(最好),它是可能更好地拼出來:

kwargs = {'kwarg1': kwarg1, ...} 
1

這是Python3.3 +代碼,它會自動創建關鍵字參數名稱列表。只是爲了完善。我更喜歡任何簡單的解決方案。

import inspect 

def my_func(*, kwarg1=None, kwarg2=None, kwarg3=None): 
    local_vars = locals() 
    kwargs = {k: local_vars[k] for k in KWARGS_my_func} 
    print(kwargs) 

KWARGS_my_func = [p.name for p in inspect.signature(my_func).parameters.values() 
        if p.kind == inspect.Parameter.KEYWORD_ONLY] 

my_func(kwarg2=2) 
相關問題