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

Fre*_*abe 61 python python-2.x

当"解构"元组时,我可以_用来表示我不感兴趣的元组元素,例如

>>> a,_,_ = (1,2,3)
>>> a
1
Run Code Online (Sandbox Code Playgroud)

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

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

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

>>> def f(a,,): return a
  File "<stdin>", line 1
    def f(a,,): return a
        ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

还有另一种方法可以达到同样的目的吗?

box*_*xed 85

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

def f(foo, unused1, unused2, unused3):
    del unused1, unused2, unused3
    return foo
Run Code Online (Sandbox Code Playgroud)

这有很多好处:

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

  • 太棒了,这是处理LEADING未使用参数的唯一答案,而不是尾随.其他人应该被投票或删除;) (5认同)
  • 我非常喜欢这个提示并将采用它.我还会添加一个小注释,例如``忽略参数`,因为意图并不是真的要"删除"变量. (2认同)

Pau*_*own 38

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

def foo(bar, *_):
    return bar
Run Code Online (Sandbox Code Playgroud)

它甚至通过了PyCharm的支票.

  • 我使用`_name`之类的`_rubbish`作为一次性参数有三个原因:a)Pycharm不再显示警告.b)我记得**我扔掉了什么.c)与单个下划线没有冲突. (5认同)
  • 这是pylint使用的默认值,允许不使用匹配`ignored-argument-names=_.*`模式的参数 (2认同)

Fre*_*Foo 25

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

def f(a, *unused):
    return a
Run Code Online (Sandbox Code Playgroud)

  • 嗯,真好!甚至可以使用lambdas.但是,如果我想忽略第一个和第三个参数而不是第二个参数,该怎么办? (2认同)
  • @JoelCornett:我不确定我是否理解。也许是我缺乏Python专业知识-我使用的框架要求我传递带有四个参数的可调用对象。该框架最终调用了我的函数,例如`f(a,b,c,d)`。它似乎没有明确地命名参数-在这种情况下,在我这边使用`kwargs`会有所帮助吗?也许框架不是最理想的,但是我该说些什么-我必须使用给出的内容。:-} (2认同)

Ron*_*yis 18

您可以使用'_'作为前缀,这样pylint将忽略以下参数:

def f(a, _b, _c):
Run Code Online (Sandbox Code Playgroud)