【发布时间】:2020-03-08 13:22:49
【问题描述】:
我的问题与这个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添加到func_a和func_b,也许? -
为什么不直接为
func中的每个提取相关数据?到处传递所有数据似乎很混乱。 -
Python 函数对函数签名非常严格,尽管您可以编写一个几乎可以接受任何内容的签名,即
def func(*args, **kwargs)。但是,按照您编写函数的方式,如果您传递了不正确的参数,他们会抱怨,这是一件好事 -
在您的示例中,您没有将 arg3 传递给 func(),这就是 func2 无法访问它的原因。
-
"那里的 **kwargs 解决方案对我不起作用。"需要进一步解释。你尝试了什么?什么不起作用?
标签: python function parameter-passing