有没有办法将比函数调用中调用的更多的 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
有什么方法可以不报错地传入mybigdict
吗?在我的理想世界中,'c'
永远不会在 mydef
中使用,只会被忽略。
谢谢,我的挖掘没有找到我要找的东西。
编辑:稍微修正了代码。 mydef(a, b, **kwargs)
是我正在寻找的形式,但检查函数 args 对我来说是新事物,绝对适合我的工具箱。谢谢大家!
最佳答案
不可以,除非函数定义允许更多参数(使用 **kwargs
包罗万象的语法),否则您不能使用比定义的参数更多的参数调用方法。
您可以反省该函数并删除它不接受的任何参数:
import inspect
mybigdict = {'a2' : 'foo', 'b2' : 'bar', 'c2' : 'nooooo!'}
sig = inspect.signature(mydef)
if not any(p.kind == p.VAR_KEYWORD for p in sig.parameters.values()):
for missing in mybigdict.keys() - sig.parameters.keys():
del mybigdict[missing]
mydef(**mybigdict)
我正在使用 inspect.signature()
function检查可调用对象是否支持 **kwarg
包罗万象(通过查找 Parameter.VAR_KEYWORD
条目),如果不支持,我使用 set difference mybigdict
和签名 .parameters
之间的映射,以删除该方法不支持的任何内容。
关于python - 将比初始设置更多的 kwargs 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12093726/