有没有办法将更多的kwargs发送到函数调用中调用的函数中?
例:
def mydef(a, b):
print a
print b
mydict = {'a' : 'foo', 'b' : 'bar'}
mydef(**mydict) # This works and prints 'foo' and 'bar'
mybigdict = {'a' : 'foo', 'b' : 'bar', 'c' : 'nooooo!'}
mydef(**mybigdict) # This blows up with a unexpected argument error
Run Code Online (Sandbox Code Playgroud)
有没有办法传递mybigdict没有错误? 'c'永远不会mydef在我的理想世界中使用,只会被忽略.
谢谢,我的挖掘没有找到我想要的东西.
编辑:修改了一下代码.这mydef(a, b, **kwargs)是我正在寻找的形式,但检查功能args对我来说是一个新事物,绝对是我工具箱的东西.感谢大家!
Mar*_*ers 17
不,除非函数定义允许更多参数(使用**kwargscatch-all语法),否则不能调用具有多于其定义的参数的方法.
您可以内省该函数并删除它不会接受的任何参数:
import inspect
mybigdict = {'a2' : 'foo', 'b2' : 'bar', 'c2' : 'nooooo!'}
argspec = inspect.getargspec(mydef)
if not argspec.keywords:
for key in mybigdict.keys():
if key not in argspec.args:
del mybigdict[key]
mydef(**mybigdict)
Run Code Online (Sandbox Code Playgroud)
我正在使用该inspect.getargspec()函数检查callable是否支持**kwargcatch-all via .keywords,如果没有,我使用该.args信息删除该方法不支持的任何内容.
澄清Martijn Pieters的答案(为了清楚起见).如果将函数签名更改为:
def mydef(a, b, **kwargs):
这意味着如果不改变签名就不可能.但如果这不是问题,那就行了.