假设我现在有一个定义明确的函数
def f1(a):
...
,我无法更改其定义。现在,我想用字典中的参数来调用它
D={ 'a':1 , 'b':2}
如果我这样称呼
f1(**D)
会有语法错误(因为b在f1中未定义)。我的问题是,是否可以找到一种让函数找到仅需要的参数的聪明方法?
答案 0 :(得分:4)
您可以使用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
,在这种情况下,它具有相同的用法。
答案 1 :(得分:1)
您可以从函数的code object中获取参数名称,然后在字典中查找它们的值:
>>> 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
答案 2 :(得分:-1)
这是一个获得字典并仅使用'b'键的函数示例:
In [14]: def f1(mydict):
...: return mydict['b']
...:
In [15]: x={'a': 1, 'b':2}
In [16]: f1(x)
Out[16]: 2