Python 分配给“U”的原因&引用;

Python 分配给“U”的原因&引用;,python,programming-languages,syntax,idioms,Python,Programming Languages,Syntax,Idioms,我在一些上下文中看到过这一点,例如 按顺序拆包: _, x = L.pop() # e.g., L is a list of tuples 要初始化容器,请执行以下操作: X = _ 很明显,这不是正式python语法的一个元素,而是我所知道的用法 因此,我很好奇使用它的可能原因是什么,通常有什么好处(如果有的话) 注意:我的问题涉及到在脚本、模块等中使用“u”,但不是在交互式提示中使用“u”。在IDLE中,与python一起打包的交互式解释器以及在ipython中,“\u1”被用作最近返

我在一些上下文中看到过这一点,例如

按顺序拆包:

_, x = L.pop()  # e.g., L is a list of tuples
要初始化容器,请执行以下操作:

X = _
很明显,这不是正式python语法的一个元素,而是我所知道的用法

因此,我很好奇使用它的可能原因是什么,通常有什么好处(如果有的话)


注意:我的问题涉及到在脚本、模块等中使用“u”,但不是在交互式提示中使用“u”。在IDLE中,与python一起打包的交互式解释器以及在ipython中,“\u1”被用作最近返回结果的占位符。

\u1
是一个有点特殊的变量名。在shell中,它包含以前计算的表达式的值:

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

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

在脚本中使用
。使用“从交互式解释程序”时,如果您正在进行任何数学计算,并且希望得到上一个表达式的结果,则可以使用
\uu
。Python教程在相同的上下文中介绍了
。我看到该行为是从某些shell行为继承而来的

在您的示例中:

_, x = L.pop()
x, y, _, w = getPoint()

将失败,因为L.pop()将返回一个值,而您无法将其分配给两个变量,而且将值分配给具有特殊含义的
\uu
也不是一个好主意。

优点是它是一个单个字符,而且“没有名字”


缺点是它经常用于I18N,作为参考。

我看到它有两种用法。两者都是一次性变量,但更常见的是作为国际化的文本包装器

丢弃变量 虽然我不建议这样做。称之为“忽略”

更清楚了

i18n包装
label
这里是一个“消息”,一个具有消息id和域的对象,当呈现到用户界面(如网页)时,它将通过消息目录转换为当前用户语言,这样标签将以用户的本地语言结束


此处使用
,因为它简短而不引人注目。产生的代码,
(“标签文本”)
看起来与字符串没有什么不同,而
MyDomainMessage(“标签文本”)
看起来非常不同,而且长得多。

我看到了变量
在您不关心它会得到什么值的情况下使用,或多或少类似于
/dev/null
变量

在python哲学中,可读性比其他语言更重要,例如:

_, x = L.pop()
x, y, _, w = getPoint()
与其他备选方案相比,它结构紧凑,可读性更高,表明您不关心结果的
z
坐标。其他用途可能是

for _ in xrange(10):
    print "Hello, world."

对于语言来说,实际上
与其他任何语言一样是有效的标识符,即使在一些交互式python循环中它有特殊的含义

这种作为“匿名变量”的用法并不常见,但仍然存在,因此您可以在现有代码中找到它。例如,它不会报告任何有关上述
矩阵
函数的信息,但如果使用“普通”变量名,它会抱怨


然而,也有一些包赋予了
一个定义良好的含义(gettext)。

pop()
可以很好地返回元组。:)@卡尔,海报上说L是一个元组列表。试试看。正如@carl所说,pop()对于元组列表非常有效。试试`,x=[(1,2)].pop()`好的,我看到了可以使用的用例。返回值是两个元素的元组。我使用
\uu
(或允许的等效语言)表示“丢弃”值。+1表示建议不要将
\u
用作匿名变量。它往往会让人感到困惑,并且与交互式解释器中的
\uu
冲突。尽管有您的建议,使用
\u
来忽略值已经成为非常惯用的Python了。如果有人想知道的话,使用“\u>作为静态分析器不会抱怨的一次性变量(PyLint也忽略未使用的下划线变量)源于其他将此作为语言规范的语言。我知道的最早的示例是Prolog,一种将未使用的变量标记为错误的语言。
for _ in xrange(10):
    print "Hello, world."
def matrix(rows, columns):
    return [[0] * columns for _ in xrange(rows)]