如果不需要变量的值,请将其分配给特殊变量
_。
就Python而言,实际上没有什么特别的
_。与其他名称一样,它只是另一个合法标识符名称。
但是,对于大多数“棉绒”式工具(希望包括PyDev),更重要的是,人类读者,它的特殊含义是:“我不需要此变量,我只在这里放一些东西,因为API
/语法/无论需要什么”。这意味着他们不会警告您不使用它。
所以:
_, content = myfunc()[2]
是的,您说对了,通常比更具可读性
myfunc()[2][1]。不仅如此,它还可以帮助您捕获更多错误-
如果
myfunc()[2]没有正好两个成员,则将抛出元组分配,而
[1]不会。
很少,这不是一个好主意,因为您希望尽快将该值收集到垃圾中,并且将其绑定到
_而不是根本不绑定(例如,通过
[2][1])会延迟该值。
更严重的是,这确实与另一个习惯用法冲突,后者也特别使用了
_:
gettext用于国际化的代码通常会:
import gettext_ = gettext.gettext
或者,等效地:
from gettext import gettext as _
显然,您不能同时使用
_gettext快捷方式和无意义的标识符。(你 可以
真正摆脱它,因为
gettext意思是在模块全球层面的约束,以及毫无意义的标识应该只是内部函数体中使用…但是,它仍然是一个非常糟糕的主意去尝试,因为在某些时候你会结束
gettext
_在分配给它一个阴影的局部值之后,在函数中使用in。)
_在任何情况下都没有强迫您使用的方法-
但是,如果您使用其他任何方法,则可能会使读者感到困惑(并且可能会混淆您使用的同一种工具)重新寻求安抚)。因此,您必须确定在任何给定项目中哪个对您更重要。(通常,如果您使用的是
gettext,
如果您反复调用
myfunc和处理某些值,则可能需要考虑编写包装函数:
def mywrapperfunc(): _, content = myfunc()[2] return content
然后您的代码就可以做到:
content = mywrapperfunc()
这具有许多优点:
- 显然,它比任何需要您记住的内容都更容易阅读,您想要记住的是,元组的后半部分位于由返回的序列的索引2中
myfunc
。 - 它为您提供了一个好名字的地方(希望比更好
mywrapperfunc
)和/或注释/文档字符串,以防万一。 - 这意味着,如果您以后进行更改
myfunc
,则现在所需的值在索引3中而不是2中,并且3元素元组的第二个成员而不是2元素元组,则只需要更改mywrapperfunc
而不是20个不同的行即可码。 - 这也意味着,如果您以后想使用相冲突的
_
习惯用法(例如,使用来对代码gettext
进行更改),则只需要在一个地方进行更改即可。
旁注:在交互式解释器中,
_确实
有特殊含义:它与最后一个交互式命令的结果绑定。但这并不意味着您不能
_在交互式解释器中使用。(实际上,它在那里更好,因为您存储在其中的所有内容都会立即被覆盖,因此不会出现非常罕见的GC问题。)



