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

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

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

使用Python 2.x,我怎样才能expression与函数参数相同? 我试图使用下划线:

 >>> 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 

还有另外一种方法来实现吗?

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

 def f(a, *unused): return a 

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

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

这具有许多优点:

  • 调用该函数时,仍然可以使用未使用的variables作为位置参数和关键字参数
  • 如果你以后开始使用它,你不能删除它,所以减less错误的风险
  • 这是标准的Python语法
  • pycharm做正确的事情!

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

 def foo(bar, *_): return bar 

它甚至通过了PyCharm的检查。

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

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

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

你的函数有3个参数 – 这就是它所调用的(鸭子键入,记得吗?)。 所以你得到:

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

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

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

那里有警告

不过,我仍然喜欢更多的盒装方式:

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

它保持参数名称的自我logging质量。 他们是一个function,而不是一个错误。

但是,语言本身并不强迫你 – 你也可以换个angular度,让所有的函数都有签名(*args, **kwargs) ,并且每次都手动进行参数parsing。 想象一下给你的控制水平。 在更改“签名”(参数数量和含义)后,不要以过时的方式调用exception。 这是值得考虑的事情;)