变量分配给最后执行的行?

6 投票
4 回答
6090 浏览
提问于 2025-04-17 11:59

我刚刚在Python解释器里发现了一些奇怪的东西。让我给你看看:

$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> _
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '_' is not defined
>>> 5 + 4
9
>>> _
9
>>> 'Hello world'
'Hello world'
>>> _
'Hello world'
>>> type(3.5)
<type 'float'>
>>> _
<type 'float'>

你可以在自己的解释器里试试;这里没有什么花招!

最后执行的那一行的结果是不是被赋值给了一个叫_的变量?

有没有人知道这是什么情况?有没有相关的文档?在什么情况下它会有用呢?

4 个回答

0

根据在Python中单下划线“_”变量的目的是什么?的内容,

单下划线_主要有三种用法。其中一种是“真实”的用法(你发现的那种),另外两种是约定俗成的用法。

真有意思……我之前从来不知道!

3

在使用交互式解释器时,这个功能很有用。如果你忘了给某个返回的对象起名字,你可以用 x = _ 来获取它的引用。需要注意的是,在 ipython 中,你还可以用 __ 来获取倒数第二个返回的对象,而 ___ 则是倒数第三个。

9

你可以看看这里 Python中的保留标识符

在交互式解释器中,特殊标识符 _ 用来存储上一次计算的结果;这个结果被存储在 builtin 模块里。

这种行为在Haskell的交互环境 ghci 中也能找到。在这里,使用的不是 _,而是 it

Prelude> 2+2
4
Prelude> it
4

撰写回答