我不明白這個單下劃線是什麼意思。這是一個神奇的變量嗎?我無法在locals()和globals()中看到它。單下劃線「_」是Python中的一個內置變量嗎?
>>> 'abc'
'abc'
>>> len(_)
3
>>>
我不明白這個單下劃線是什麼意思。這是一個神奇的變量嗎?我無法在locals()和globals()中看到它。單下劃線「_」是Python中的一個內置變量嗎?
>>> 'abc'
'abc'
>>> len(_)
3
>>>
在標準的Python REPL,_
表示最後一個返回值 - 在您叫len(_)
點,_
是價值'abc'
。
例如:
>>> 10
10
>>> _
10
>>> _ + 5
15
>>> _ + 5
20
這是由sys.displayhook
處理,並且_
變量超出在builtins
命名空間之類的東西int
和sum
,這就是爲什麼你不能在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._
就會再次顯示)。
爲什麼你看不到它?它在__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__
的成員是隨處可見,任何模塊中。
爲什麼只能在REPL中使用,但不能放置在__builtin__中的腳本中? – user937284
通常,我們在Python中使用_來綁定ugettext函數。
這也是如此,但只適用於Python應用程序。 'gettext.install'將綁定到'__builtins __._',這樣它就可以在不導入所有應用程序的情況下使用;因此是同一種「魔術」的名字。 – u0b34a0f6ae
供參考:REPL是Read-Eval-Print Loop的縮寫。一如往常,如果你想要,維基百科有更多的信息。 http://en.wikipedia.org/wiki/Read-eval-print_loop –
什麼是「普通標識符」?快速搜索導致「僅僅是普通的;普通的;平庸的」 - 這對Python腳本中的「_」意味着什麼? – user937284
@ectomorph更新澄清。 –