我怎样才能表示未使用的函数参数?

时间:2012-04-05 09:04:05

标签: python python-2.x

当“解构”一个元组时,我可以使用_来表示我不感兴趣的元组元素,例如。

>>> a,_,_ = (1,2,3)
>>> a
1

使用Python 2.x,如何用函数参数表达相同的内容?我试图使用下划线:

>>> def f(a,_,_): return a
...
  File "<stdin>", line 1
SyntaxError: duplicate argument '_' in function definition

我也试图完全省略这个论点:

>>> def f(a,,): return a
  File "<stdin>", line 1
    def f(a,,): return a
        ^
SyntaxError: invalid syntax

还有另一种方法可以实现同样的目标吗?

7 个答案:

答案 0 :(得分:80)

我刚才想到的一个有趣的方法是删除变量:

def f(foo, unused1, unused2, unused3):
    del unused1, unused2, unused3
    return foo

这有很多好处:

  • 当将函数作为位置参数和关键字参数调用时,仍然可以使用未使用的变量。
  • 如果你以后开始使用它,你就不能删除,因此错误的风险会降低。
  • 这是标准的python语法。
  • PyCharm做对了!
  • PyLint不会抱怨,使用delPyLint manual中推荐的解决方案。

答案 1 :(得分:33)

下划线用于我们不关心的事情,* in * args表示参数列表。因此,我们可以使用* _表示我们不关心的事项列表:

def foo(bar, *_):
    return bar

它甚至通过了PyCharm的支票。

答案 2 :(得分:24)

以下是我对未使用的参数所做的事情:

def f(a, *unused):
    return a

答案 3 :(得分:9)

您可以使用&#39; _&#39;作为前缀,以便pylint将忽略这些参数:

def f(a, _b, _c):

答案 4 :(得分:1)

如果你同时拥有args和关键字arg,你应该使用

def f(a, *args, **kwargs):
    return a

答案 5 :(得分:1)

我认为接受的答案很糟糕,但它仍然可以工作,如果你使用我应该称之为“Perl方式”来处理参数(我真的不知道Perl,但是在看到之后我不想学习它sub语法,手动参数解包):

你的函数有3个参数 - 这是它被调用的东西(鸭子打字,还记得吗?)。所以你得到:

def funfun(a, b, c):
    return b * 2

2个未使用的参数。但是现在,进入改进的larsmans的方法:

def funfun(*args):
    return args[1] * 2

然后发出警告......

然而,我仍然喜欢盒装的方式:

def funfun(a, b, c):
    del a, c
    return b * 2

它保持参数名称的自记录质量。它们是一个特征,而不是一个bug。

但是,语言本身不会强迫你到那里 - 你也可以反过来,只是让你的所有函数都有签名(*args, **kwargs),并且每次都手动解析参数。想象一下给你的控制水平。在更改“签名”(参数计数和含义)后以不推荐的方式调用时不再有异常。这是值得考虑的事情;)

答案 6 :(得分:0)

为了避免对未使用的* args和/或** kwargs发出“未使用的变量”检查消息,我将issubsetcol1 col1_filter col2 col2_filter col3 Col3_filter def True 456 True *& True pqr 789 ^% abc 123 @# oup 852 $% 替换为argskwargs

_

除了删除消息外,它还清楚表明您不关心这些参数。

我不能说这是否是一个真正的通用解决方案,但是它到现在为止在我使用过的任何地方都有效。