我的问题与此one有关,但是那里的**kwargs
解决方案不适用于我。
假设我具有如下所示的一些功能。 func_a
打印arg1
和arg2
的值。 func_b
打印arg1
和arg3
的值。因此,arg1
对两个功能都是通用的。我现在有一个函数func
,它同时调用func_a
和func_b
。在func
的参数中,我希望能够以arg1
和arg2
作为可选参数传递arg3
,因此为什么我默认将arg2
和arg3
设置为None
。但是,当我尝试调用func(arg1='how', arg2='are')
时,出现unexpected keyword argument
错误。我怎样才能解决这个问题?
def func_a(arg1, arg2=None):
print(arg1)
if arg2 is not None:
print(arg2)
def func_b(arg1, arg3=None):
print(arg1)
if arg3 is not None:
print(arg3)
def func(arg1, **kwargs):
func_a(arg1, **kwargs)
func_b(arg1, **kwargs)
# Try to call func
func(arg1='how', arg2='are')
how
are
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-372fbc7b1e90> in <module>
----> 1 func(arg1='how', arg2='are')
<ipython-input-8-5edc2a4c5bfd> in func(arg1, **kwargs)
11 def func(arg1, **kwargs):
12 func_a(arg1, **kwargs)
---> 13 func_b(arg1, **kwargs)
TypeError: func_b() got an unexpected keyword argument 'arg2'
kwargs
只是函数参数的决定,因此您可以使用get
来获取每个函数的相关参数,如果找不到它们,则将返回None
:
def func_a(arg1, arg2=None):
print(arg1)
if arg2 is not None:
print(arg2)
def func_b(arg1, arg3=None):
print(arg1)
if arg3 is not None:
print(arg3)
def func(arg1, **kwargs):
func_a(arg1, arg2=kwargs.get("arg2"))
func_b(arg1, arg3=kwargs.get("arg3"))
您想通过允许它们使用kwarg来盲目地将func_a中的arg3和func_b中的arg2丢弃,但似乎忽略了它们。
def func_a(arg1, arg2=None, **kwargs):
...
def func_b(arg1, arg3=None, **kwargs):
...