Я не понимаю, что означает это единственное подчеркивание. Это волшебная переменная? Я не вижу его в locals() и globals().
>>> 'abc'
'abc'
>>> len(_)
3
>>>
Я не понимаю, что означает это единственное подчеркивание. Это волшебная переменная? Я не вижу его в locals() и globals().
>>> 'abc'
'abc'
>>> len(_)
3
>>>
В стандартном REPL Python _
представляет последнее возвращаемое значение - в точке, где вы вызывали len(_)
, _
было значением 'abc'
.
Например:
>>> 10
10
>>> _
10
>>> _ + 5
15
>>> _ + 5
20
Это обрабатывается sys.displayhook
, а переменная _
находится в builtins
с такими вещами, как int
и sum
, поэтому вы не смогли найти его в globals()
.
Обратите внимание, что такой функции не существует в сценариях Python. В script, _
не имеет специального значения и не будет автоматически задано значение, созданное предыдущим оператором.
Кроме того, остерегайтесь переназначения _
в 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
Таким образом, это не глобально, не локально. 1
И где это назначение происходит? 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__.
1 2012 Edit: я бы назвал его "суперглобальным", так как члены __builtin__
доступны везде, в любом модуле.
Обычно мы используем _ в Python для привязки функции ugettext.