我在一些情况下已经看到了这一点,例如,
按顺序拆包:
_, x = L.pop() # e.g., L is a list of tuples
初始化容器:
X = _
显然,这不是正式python语法的一个元素,而是我所知道的用途似乎是自由裁量的。
所以我很好奇使用它的可能原因是什么?一般来说有什么优势(如果有的话)?
注意 :我的问题与在脚本,模块等中使用“_”有关,但 不是 < / strong>在交互式提示下使用它。在 IDLE 中,使用python打包的交互式解释器以及 ipython ,“_”中的交互式解释器用作最近返回的结果的占位符)。
答案 0 :(得分:32)
我看过它有两种用途。两者都是一个抛弃变量,但更常见的是作为国际化的文本包装。
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")
看起来非常不同,而且时间也长得多。
答案 1 :(得分:7)
优点是它是一个单一的角色而且是“无名的”。
缺点是它常用于I18N,作为对gettext.gettext()
的引用。
答案 2 :(得分:5)
_
是一个有点特殊的变量名。在shell中,它包含先前计算的表达式的值:
>>> 1+2
3
>>> _+4
7
在脚本中,它通常用作一次性变量,i。即出于语义原因需要的,但以后不会使用。从语法上讲,它只是一个与其他变量一样的变量。
答案 3 :(得分:3)
我看到变量_
在你不关心它会得到什么价值时使用,或多或少像/dev/null
变量。
在python哲学中,可读性比其他语言更有价值,例如:
x, y, _, w = getPoint()
比其他替代方案更紧凑,更易读,表明您不关心结果的z
坐标。其他用途可能是
for _ in xrange(10):
print "Hello, world."
或
def matrix(rows, columns):
return [[0] * columns for _ in xrange(rows)]
对于语言,_
确实是一个有效的标识符,即使在某些交互式python循环中它具有特殊含义。
这种用作“匿名变量”的频率并不常见,但仍然存在,因此您可以在现有代码中找到它。例如,PyChecker不会报告上述matrix
函数的任何内容,但如果您使用“普通”变量名称,它会抱怨。
但也有一些软件包可以为_
提供明确定义的含义(gettext)。
答案 4 :(得分:-2)
在脚本中使用_
没有充分的理由。在使用交互式解释器时,如果您正在进行任何数学计算,并且您想要前一个表达式的结果,则可以使用_
。 Python教程在同一个上下文中介绍了_
。我发现行为是从某些shell行为中延续出来的。
在你的例子中:
_, x = L.pop()
会失败,因为L.pop()会返回一个值而你不能将它分配给两个变量,而且将值赋给具有特殊含义的_
也不是一个好主意。