簡體   English   中英

Python:如何僅從字典將所需的參數傳遞給函數?

[英]Python: How to only pass needed arguments into function from a dictionary?

假設現在我有一個定義明確的函數

def f1(a):
    ...

而且我無法更改其定義。 現在我想用字典中的一個參數來調用它

D={ 'a':1 , 'b':2}

如果我這樣稱呼

f1(**D)

將會出現語法錯誤(因為b未在f1中定義)。 我的問題是,是否可以找到一種聰明的方法讓函數查找僅需要的參數?

您可以使用inspect.getargspec

d = {'a': 5, 'b': 6, 'c': 7}
def f(a,b):
    return a + b

f(*[d[arg] for arg in inspect.getargspec(f).args])

給出11


感謝Eugene, getargspec是遺留的,相反,您應該使用在這種情況下具有相同用法的getfullargspec

您可以從函數的代碼對象中獲取參數名稱,然后在字典中查找它們的值:

>>> def f(a):
...     b = 2
...     return a + b
...
>>> D = {'a': 1, 'b': 2, 'c': 3}
>>> nargs = f.__code__.co_argcount
>>> varnames = f.__code__.co_varnames
>>> f(*(D[arg] for arg in varnames[:nargs]))
3

這是獲得字典並僅使用'b'鍵的函數示例:

In [14]: def f1(mydict):
    ...:     return mydict['b']
    ...: 

In [15]: x={'a': 1, 'b':2}

In [16]: f1(x)
Out[16]: 2

暫無
暫無

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

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