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