传递字典时如何删除/忽略意外的关键字参数?(How to remove/ignore unexpected keyword arguments when passing as dictionary?)

下面的代码

def f(par1, par2): print("par1 = %s, par2 = %s" % (str(par1), str(par2))) pars = { 'par1': 12, 'par2': 13, 'par3': 14 } f(**pars)

引发错误

TypeError: f() got an unexpected keyword argument 'par3'

如何忽略par3或找到,它是意想不到的,并通过程序从字典中弹出它?

The following code

def f(par1, par2): print("par1 = %s, par2 = %s" % (str(par1), str(par2))) pars = { 'par1': 12, 'par2': 13, 'par3': 14 } f(**pars)

raises error

TypeError: f() got an unexpected keyword argument 'par3'

How to either ignore par3 or find, that it is unexpected and pop it from dictionary programmtically?

最满意答案

你可以用__code__.co_varnames来获得函数参数

expected = {key: pars[key] for key in f.__code__.co_varnames} f(**expected)

You can get functions arguments with __code__.co_varnames

expected = {key: pars[key] for key in f.__code__.co_varnames} f(**expected)传递字典时如何删除/忽略意外的关键字参数?(How to remove/ignore unexpected keyword arguments when passing as dictionary?)

下面的代码

def f(par1, par2): print("par1 = %s, par2 = %s" % (str(par1), str(par2))) pars = { 'par1': 12, 'par2': 13, 'par3': 14 } f(**pars)

引发错误

TypeError: f() got an unexpected keyword argument 'par3'

如何忽略par3或找到,它是意想不到的,并通过程序从字典中弹出它?

The following code

def f(par1, par2): print("par1 = %s, par2 = %s" % (str(par1), str(par2))) pars = { 'par1': 12, 'par2': 13, 'par3': 14 } f(**pars)

raises error

TypeError: f() got an unexpected keyword argument 'par3'

How to either ignore par3 or find, that it is unexpected and pop it from dictionary programmtically?

最满意答案

你可以用__code__.co_varnames来获得函数参数

expected = {key: pars[key] for key in f.__code__.co_varnames} f(**expected)

You can get functions arguments with __code__.co_varnames

expected = {key: pars[key] for key in f.__code__.co_varnames} f(**expected)