关于语法:Python中的_做什么?

What does _ in Python do?

本问题已经有最佳答案,请猛点这里访问。

我在某个地方看到了在python中使用的_字符,比如:

1
print _

有人能帮我解释一下它的作用吗?


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

1
2
3
4
5
6
7
8
9
>>> 1 + 1
2
>>> print _
2
>>> 2 + 2
4
>>> print _
4
>>>

然而,在正常的python1代码中,_只是一个典型的名称。您可以像分配其他任务一样分配给它:

1
2
3
_ = 3
print _
# Output: 3

尽管我不建议这么做,因为_是一个糟糕的名字。此外,按照惯例,它还表示一个简单的占位符名称。例如:

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

使用_表示我们对2不感兴趣。另一个例子是:

1
2
for _ in range(10):
    function()

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

1"python"是指cpython,这是该语言的标准风格。其他实现可能会选择不同的方式。例如,ipython就可以这样说,只使用下划线的名称:

The following GLOBAL variables always exist (so don’t overwrite
them!):

1
2
3
[_] (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输出缓存系统


它只是另一个变量名,通常用于三个非常不同的方面:

在python interactive shell中,_u是输入的最后一个表达式的值:

1
2
3
4
>>> 3 + 3
6
>>> _ == 6
True

它用于指示某个变量只存在于其中,因为它需要并且不会被进一步使用:

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

(在这里,get_或_create返回了一个包含两个元素的元组,其中只有一个元素供我们使用)。

用于转换字符串(通常是ugettext)的函数通常在本地重命名。以使其占用尽可能少的屏幕空间:

1
2
3
 from django.utils.translation import ugettext as _

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


与大多数其他编程语言一样,'_'是一个合法的python字符。我认为matlab是一个例外,你不能将它用于任何matlab文件名。我知道,因为我过去试过,但失败了。不知道这是不是在R2014B之后发生了变化。在python中,最好的例子是__init____self____str____repr__等。

与其问问题,心存疑惑,不如把它打出来看看会发生什么。您不会破坏任何东西:d.打开python idle,然后按ctrl+。您将看到许多用_甚至__命名的python本机变量和函数。我很喜欢@icodez这里提供的变量赋值示例:)