当“解构”一个元组时,我可以使用_
来表示我不感兴趣的元组元素,例如。
>>> 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
还有另一种方法可以实现同样的目标吗?
答案 0 :(得分:80)
我刚才想到的一个有趣的方法是删除变量:
def f(foo, unused1, unused2, unused3):
del unused1, unused2, unused3
return foo
这有很多好处:
del
是PyLint 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发出“未使用的变量”检查消息,我将issubset
和col1 col1_filter col2 col2_filter col3 Col3_filter
def True 456 True *& True
pqr 789 ^%
abc 123 @#
oup 852 $%
替换为args
和kwargs
:
_
除了删除消息外,它还清楚表明您不关心这些参数。
我不能说这是否是一个真正的通用解决方案,但是它到现在为止在我使用过的任何地方都有效。