分配给"_"的原因

dou*_*oug 15 python syntax programming-languages idioms

我在几个背景下看到过这种情况,例如,

按顺序拆包:

_, x = L.pop()  # e.g., L is a list of tuples
Run Code Online (Sandbox Code Playgroud)

初始化容器:

X = _
Run Code Online (Sandbox Code Playgroud)

所以很明显这不是正式python语法的一个元素,而是我所知道的用途似乎是自由裁量的.

所以我很好奇它使用的可能原因是什么,一般有什么优势(如果有的话)?

注意:我的问题涉及在脚本,模块等中使用"_",而不是在交互式提示符下使用它.在 IDLE中,使用python打包的交互式解释器以及 ipython中的"_"用作最近返回结果的占位符.

Len*_*bro 32

我看过它有两种用途.两者都是一个抛弃变量,但更常见的是作为国际化的文本包装器.

扔掉变量

name, _ = 'bida.bombu.foo'.split('.', 1)
Run Code Online (Sandbox Code Playgroud)

虽然我不推荐这个.称之为"忽略".

name, ignored = 'bida.bombu.foo'.split('.', 1)
Run Code Online (Sandbox Code Playgroud)

它更清楚.

i18n包装

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

label = _("The label text")
Run Code Online (Sandbox Code Playgroud)

label 这里将是一个"消息",一个具有消息ID和域的对象,当呈现给用户界面(如网页)时,它将通过消息目录转换为当前用户语言,以便标签将以用户的本地语言结束.

_在这里使用,因为它短而不引人注目.生成的代码_("The label text")看起来与字符串不同,虽然MyDomainMessage("The label text")看起来非常不同,但也更长.


Ign*_*ams 7

优点是它是一个单一的角色而且它是"无名的".

缺点是,它经常用于国际化,作为一个参考gettext.gettext().


Tim*_*ker 5

_是一个有点特殊的变量名称.在shell中,它包含先前计算的表达式的值:

>>> 1+2
3
>>> _+4
7
Run Code Online (Sandbox Code Playgroud)

在脚本中,它通常用作一次性变量,即出于语义原因需要的变量,但以后不会使用.从语法上讲,它只是一个变量,就像任何其他变量一样.