[英]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.