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