通常,我使用_
来访问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
所以我想我的问题是为什么?为什么会这样?为什么有时_
可以更改,而不意味着最后的结果?
答案 0 :(得分:8)
原因很简单-尝试做
[i for i in range(1000)]
然后访问i-您将看到未定义i(它的范围在列表推导之内-当您退出列表推导时,“没有i”)。
这与for循环相反,在for循环中,i的范围不在实际的for循环之内,因此您可以从外部进行访问。
因此,如果我们处理您的案例(使用_),如果定义了_(例如使用常规的for循环),则需要del
。如果您在列表解析中执行此操作,则一旦列表解析结束,就不再定义下划线-这意味着它只是最后一个值