【发布时间】:2020-03-26 21:32:14
【问题描述】:
对于我使用 Python 编写的代码,我想调用许多带有特定参数的函数。但是,对于某些函数,该参数没有任何作用。不过,出于兼容性原因,我想添加参数。例如,考虑以下最小的工作示例:
def my_function(unused=False):
""" Function with unused argument. """
return True
显然,unused 参数没有被使用,所以 Pylint 会抛出一个警告:
W0613: Unused argument 'redundant' (unused-argument)
我的意思是我不想删除参数unused,因为函数my_function 的调用方式与使用unused 的许多其他函数类似 .
我的问题:如何在不删除可选参数的情况下避免来自 Pylint 的警告?
选项 1:我可以想到两个选项,但这些选项并不让我满意。一种选择是添加一些无用的代码,例如使用unused,例如,
def my_function(unused=False):
""" Function with unused argument. """
if unused:
dummy = 10
del dummy
return True
这感觉像是在浪费资源,而且只会使代码混乱。
选项2:第二个选项是抑制警告,例如,像这样:
def my_function(unused=False):
""" Function with unused argument. """
# pylint: disable=unused-argument
return True
我也不太喜欢这个选项,因为通常 Pylint 警告是不良风格的标志,所以我更倾向于寻找一种不同的编码方式来避免这个警告。
我还有哪些其他选择?
【问题讨论】:
-
我相信如果你能提及你打算如何调用这些函数会有所帮助。看起来您希望为一组函数具有一致的签名,以便您可以以类似的方式调用它们。您究竟想如何调用这些函数?
-
每个函数都在生成交通状况图。我用一个参数来判断是右手驾驶还是左手驾驶(所以上面例子中的
unused参数是用来判断我们是使用右手驾驶还是左手驾驶)。然而,对于某些数字,左手驾驶的结果与右手驾驶的结果相同,因此根本不使用该参数。我将所有函数(产生这些数字)分组在一个列表中并一个一个地执行它们。所以在[func(unused=True) for func in [my_function, my_function2]]线上的东西。这对您有帮助吗? -
是的,它有帮助,这意味着参数的名称在所有函数中必须相同,因此不能使用带前导下划线 (
_unused) 的技巧。不过,您可能可以使用**kwargs解决问题。 -
是的,更改名称不是一种选择。实际上,我已经在考虑
**kwargs,尤其是当我将使用更多输入参数时(我认为我最终会这样做)。所以这是你的一个很好的建议。 -
其实在尝试了一下之后,我不相信使用
**kwargs会好很多。 pylint 最终会触发unused-argument消息,而不是kwargs,而不是unused,另外一个缺点是可读性较差。但也许它更适合您的用例。
标签: python coding-style pylint optional-arguments