为什么“ _”不能总是在交互式shell中给我最后的结果

时间:2018-07-30 20:00:25

标签: python python-3.x

通常,我使用_来访问Python交互式shell中的最后一个结果。尤其是要为结果快速分配变量,我认为稍后可能会很重要。

我最近发现的是,如果我将_用作for循环中的值,那么我将无法再使用_来引用最后一个结果。

示例:

>>> for _ in range(10):
...   pass
...
>>> 120
120
>>> a=_
>>> a
9
>>> _
9
>>> del _ # Now I can use _ to reference the last result again
>>> 120
120
>>> a=_
>>> a
120

如果我使用空白的for循环,则_直到被删除后才被视为最后的结果,然后它就可以工作了。

如果我列出了理解力,尽管它似乎仍然可以正常工作:

>>> [1 for _ in range(10)]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> 120
120
>>> a=_
>>> a
120    

所以我想我的问题是为什么?为什么会这样?为什么有时_可以更改,而不意味着最后的结果?

1 个答案:

答案 0 :(得分:8)

原因很简单-尝试做

[i for i in range(1000)]

然后访问i-您将看到未定义i(它的范围在列表推导之内-当您退出列表推导时,“没有i”)。

这与for循环相反,在for循环中,i的范围不在实际的for循环之内,因此您可以从外部进行访问。

因此,如果我们处理您的案例(使用_),如果定义了_(例如使用常规的for循环),则需要del。如果您在列表解析中执行此操作,则一旦列表解析结束,就不再定义下划线-这意味着它只是最后一个值