Python中的下划线(" _ ")有什么用?

16 投票
5 回答
10616 浏览
提问于 2025-04-16 10:59

我在一些场合见过这个符号,比如:

在序列解包的时候:

_, x = L.pop()  # e.g., L is a list of tuples

用来初始化一个容器:

X = _

所以很明显,这并不是Python语法中的正式元素,而我知道的用法似乎是随意的。

我很好奇它使用的可能原因是什么,以及一般来说有什么好处(如果有的话)?

注意:我的问题是关于在脚本、模块等中使用“_”这个符号,但包括在交互式提示符下的用法。在IDLE(Python自带的交互式解释器)和ipython中,“_”被用作最近返回结果的占位符。

5 个回答

7

_ 是一个有点特别的变量名。在命令行中,它保存的是上一个计算结果的值:

>>> 1+2
3
>>> _+4
7

在脚本中,它通常被用作一个临时变量,也就是说,这个变量是为了语义上的需要而存在,但之后不会再用到。语法上,它和其他变量没有区别。

7

优点是它只有一个字符,而且没有名字。

缺点是它经常被用来处理国际化(I18N),作为对 gettext.gettext() 的引用。

34

我见过这个符号用两种方式。一个是作为临时变量,另一个更常见的是用作国际化的文本包装器。

临时变量

name, _ = 'bida.bombu.foo'.split('.', 1)

不过我不太推荐这样做。可以叫它“被忽略的”变量。

name, ignored = 'bida.bombu.foo'.split('.', 1)

这样更清楚。

国际化包装器

from zope.i18nmessageid import MessageFactory
_ = MessageFactory('my.domain')

label = _("The label text")

label 在这里指的是一个“消息”,它是一个包含消息ID和域的对象。当它被显示在用户界面(比如网页)上时,会通过消息目录翻译成当前用户的语言,这样用户看到的标签就会是他们的本地语言。

_ 在这里使用是因为它简短且不显眼。生成的代码 _("The label text") 看起来和普通字符串没什么不同,而 MyDomainMessage("The label text") 看起来就很不一样,而且也长得多。

撰写回答