2009-10-08 25 views

回答

43

在標準的Python REPL,_表示最後一個返回值 - 在您叫len(_)點,_是價值'abc'

例如:

>>> 10 
10 
>>> _ 
10 
>>> _ + 5 
15 
>>> _ + 5 
20 

這是由sys.displayhook處理,並且_變量超出在builtins命名空間之類的東西intsum,這就是爲什麼你不能在globals()找到它。

請注意,在Python 腳本中沒有這樣的功能。在腳本中,_沒有特殊含義,不會自動設置爲前一個語句生成的值。

另外,如果您想像上面那樣使用它,請注意在REPL中重新指派_

>>> _ = "underscore" 
>>> 10 
10 
>>> _ + 5 

Traceback (most recent call last): 
    File "<pyshell#6>", line 1, in <module> 
    _ + 5 
TypeError: cannot concatenate 'str' and 'int' objects 

這將創建一個全局變量,該變量隱藏內置函數中的_變量。要撤消分配(並刪除_從全局),你必須:

>>> del _ 

那麼功能將恢復正常(在builtins._就會再次顯示)。

+7

供參考:REPL是Read-Eval-Print Loop的縮寫。一如往常,如果你想要,維基百科有更多的信息。 http://en.wikipedia.org/wiki/Read-eval-print_loop –

+0

什麼是「普通標識符」?快速搜索導致「僅僅是普通的;普通的;平庸的」 - 這對Python腳本中的「_」意味着什麼? – user937284

+0

@ectomorph更新澄清。 –

17

爲什麼你看不到它?它在__builtins__

>>> __builtins__._ is _ 
True 

所以它既不是全球性的也不是本地的。

這個任務在哪裏發生? sys.displayhook

>>> import sys 
>>> help(sys.displayhook) 
Help on built-in function displayhook in module sys: 

displayhook(...) 
    displayhook(object) -> None 

    Print an object to sys.stdout and also save it in __builtin__. 

2012編輯:我會叫它「超全局」因爲__builtin__的成員是隨處可見,任何模塊中。

+1

爲什麼只能在REPL中使用,但不能放置在__builtin__中的腳本中? – user937284

2

通常,我們在Python中使用_來綁定ugettext函數。

+1

這也是如此,但只適用於Python應用程序。 'gettext.install'將綁定到'__builtins __._',這樣它就可以在不導入所有應用程序的情況下使用;因此是同一種「魔術」的名字。 – u0b34a0f6ae