Python:如何仅从字典将所需的参数传递给函数?

时间:2018-10-23 19:04:58

标签: python function arguments

假设我现在有一个定义明确的函数

def f1(a):
    ...

,我无法更改其定义。现在,我想用字典中的参数来调用它

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

如果我这样称呼

f1(**D)

会有语法错误(因为b在f1中未定义)。我的问题是,是否可以找到一种让函数找到仅需要的参数的聪明方法?

3 个答案:

答案 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