代码之家  ›  专栏  ›  技术社区  ›  Chrispresso

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

  •  9
  • Chrispresso  · 技术社区  · 7 年前

    一般我用 _ 访问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 回复  |  直到 7 年前
        1
  •  8
  •   maor10    7 年前

    原因很简单-试着做

    [i for i in range(1000)]
    

    然后访问I——你会看到我没有被定义(它的范围在列表理解中)——当你退出列表理解时,“没有I”。

    这与for循环形成对比,在for循环中,我的作用域不在实际的for循环中,因此您可以从外部访问它。

    所以如果我们去你的案例(用u),如果u被定义,就像用一个正则for循环,那么你需要 del 它。如果在列表理解中执行此操作,那么一旦列表理解完成,下划线就不再定义,这意味着它将只是最后一个值