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

5

我看到有些地方在Python中使用下划线_字符,例如:

print _

有人能帮我解释一下它是做什么的吗?

3个回答

18

在交互式解释器中,_ 总是指代最后输出的值:

>>> 1 + 1
2
>>> print _
2
>>> 2 + 2
4
>>> print _
4
>>>

在正常的Python1代码中,_只是一个典型的名称。您可以像任何其他名称一样对其进行赋值:

_ = 3
print _
# Output: 3

虽然我不建议真的这样做,因为_是一个可怕的名称。此外,按照惯例,它用来表示一个仅作为占位符的名称。例如:

a, _, b = [1, 2, 3]

其中使用_表示我们不关心2。另一个例子是:

for _ in range(10):
    function()

这意味着我们在循环内部没有使用计数器变量。相反,我们只希望Python调用function十次,并需要_具有有效语法。


1 在“Python”中,我指的是CPython,它是该语言的标准版本。其他实现可能选择以不同的方式进行操作。例如,IPython关于下划线命名的说明如下:

以下全局变量始终存在(因此不要覆盖它们!):

[_] (a single underscore) : stores previous output, like Python’s default interpreter.
[__] (two underscores): next previous.
[___] (three underscores): next-next previous.
来源:http://ipython.org/ipython-doc/rel-0.9.1/html/interactive/reference.html#output-caching-system

这在Ipython笔记本中也可以工作吗? - Salil Navgire
@SalilPNavgire 它在 IPython shell 中也可以工作,但是稍微有些不同 - Ashwini Chaudhary

1

这只是另一个变量名,通常用于三个非常不同的事情:

在Python交互式shell中,_是输入的最后一个表达式的值:

>>> 3 + 3
6
>>> _ == 6
True

它用于指示某些变量仅仅是因为需要而存在,不会被进一步使用:

instance, _ = models.MyModel.objects.get_or_create(name="Whee")

(此处,get_or_create 返回一个包含两个元素的元组,我们只会使用其中一个元素。)
(用于翻译字符串的函数(通常是 ugettext)通常会本地重命名为_(),以便尽可能占用较少的屏幕空间:)
 from django.utils.translation import ugettext as _

 print(_("This is a translatable string."))

0

'_'是Python中的合法字符,就像大多数其他编程语言一样。我认为MATLAB是一个例外,在MATLAB文件名中不能使用它。我知道这是因为我曾经尝试过,但失败了。不知道自R2014b以来是否有所改变。在Python中,最好的例子是__init____self____str____repr__等。

与其问问题并让自己困惑,不如直接输入并查看会发生什么。你不会破坏任何东西 :D。打开Python IDLE,按下CTRL+.,你会看到很多以_或甚至__命名的Python本地变量和函数。我非常喜欢@iCodez提供的变量赋值示例 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接