Python 带关键字参数的动态函数避免使用未使用的参数
Python dynamic functions with keyword arguments avoid unused parameter
我在 python 中有一部分代码动态调用不同的函数,我总是想传递 3 个不同的参数。但是,这些函数可能并不总是需要使用这 3 个不同的参数。
这是显示问题的非常简单的代码:
def test_keyword_args():
def fn1(a, b, c):
return a + b
def fn2(a, b, c):
return a + c
def fn3(a, b, c):
return b + c
obj = {
'a': fn1,
'b': fn2,
'c': fn3,
}
for key in obj:
value = obj[key](a=1, b=2, c=3)
if key == 'a':
assert value == 3
if key == 'b':
assert value == 4
if key == 'c':
assert value == 5
如何始终调用同一个函数 obj[key](a=1,b=2,c=3)
传递 this 关键字参数,并避免抱怨未使用的参数? (c 未在 fn1 中使用,b 未在 fn2 中使用,a 未在 fn3 中使用)
我可以想象抑制警告会起作用,但我认为这不是合适的解决方案
注意
我正在使用 Python 3.7.3
您可以仅通过在参数列表前加上 *
前缀来将参数定义为关键字,然后您可以通过将参数命名为 _
来避免未使用参数警告。使用 **_
允许我们忽略任何不在我们的命名参数中的关键字参数
def fn1(*, a, b, **_):
return a + b
def fn2(*, a, c, **_):
return a + c
def fn3(*, b, c, **_):
return b + c
您可以使用 kwargs 功能将参数传递给函数。在这种情况下,kwargs 是带有传递给函数的命名参数的字典。
def fn1(a, b, **kwargs):
return a + b
您可以以 fn1(a_value, b_value, any_parameter_1=100, any_parameter_2=100) 等格式将任何内容传递给此函数。在您收到的函数中您的变量 a 和 b 以及具有以下内容的 kwargs 字典
{
"any_parameter_1": 100,
"any_parameter_2": 1000,
}
您也可以将所有变量作为 kwargs 传递
def fn1(**kwargs):
return kwargs["a"] + kwargs["b"]
但是你需要像这样给你的参数分配名称 fn1(a=a_value, b=b_value, any_parameter_1=100, any_parameter_2=100) kwargs 字典看起来像
{
"a": a_value,
"b": b_value,
"any_parameter_1": 100,
"any_parameter_2": 1000,
}
我在 python 中有一部分代码动态调用不同的函数,我总是想传递 3 个不同的参数。但是,这些函数可能并不总是需要使用这 3 个不同的参数。 这是显示问题的非常简单的代码:
def test_keyword_args():
def fn1(a, b, c):
return a + b
def fn2(a, b, c):
return a + c
def fn3(a, b, c):
return b + c
obj = {
'a': fn1,
'b': fn2,
'c': fn3,
}
for key in obj:
value = obj[key](a=1, b=2, c=3)
if key == 'a':
assert value == 3
if key == 'b':
assert value == 4
if key == 'c':
assert value == 5
如何始终调用同一个函数 obj[key](a=1,b=2,c=3)
传递 this 关键字参数,并避免抱怨未使用的参数? (c 未在 fn1 中使用,b 未在 fn2 中使用,a 未在 fn3 中使用)
我可以想象抑制警告会起作用,但我认为这不是合适的解决方案
注意
我正在使用 Python 3.7.3
您可以仅通过在参数列表前加上 *
前缀来将参数定义为关键字,然后您可以通过将参数命名为 _
来避免未使用参数警告。使用 **_
允许我们忽略任何不在我们的命名参数中的关键字参数
def fn1(*, a, b, **_):
return a + b
def fn2(*, a, c, **_):
return a + c
def fn3(*, b, c, **_):
return b + c
您可以使用 kwargs 功能将参数传递给函数。在这种情况下,kwargs 是带有传递给函数的命名参数的字典。
def fn1(a, b, **kwargs):
return a + b
您可以以 fn1(a_value, b_value, any_parameter_1=100, any_parameter_2=100) 等格式将任何内容传递给此函数。在您收到的函数中您的变量 a 和 b 以及具有以下内容的 kwargs 字典
{
"any_parameter_1": 100,
"any_parameter_2": 1000,
}
您也可以将所有变量作为 kwargs 传递
def fn1(**kwargs):
return kwargs["a"] + kwargs["b"]
但是你需要像这样给你的参数分配名称 fn1(a=a_value, b=b_value, any_parameter_1=100, any_parameter_2=100) kwargs 字典看起来像
{
"a": a_value,
"b": b_value,
"any_parameter_1": 100,
"any_parameter_2": 1000,
}