3

Единственное подчеркивание _ в стандартном интерпретаторе Python (REPL) - это builtin variable that stores the result of the last evaluation,, который я нашел полезным. Где объясняется это документация для переводчика?Где документация для стандартного интерпретатора Python одиночная подчеркивающая «_» встроенная переменная?

Ссылка выше не из документации для переводчика, но из Lexical analysis страницы, которая говорит

специальный идентификатор _ используется в интерактивном интерпретаторе для хранения результата последней оценки; он хранится в модуле с встроенным модулем. Когда не в интерактивном режиме, _ не имеет особого значения и не определяется.

Using the Python Interpreter страница не упоминает _ и help() в интерпретатор питона ничего не знает о _ не говорят ни.

Пример использования _:

>>> 'abc' 
'abc' 
>>> _ 
'abc' 


Связанный:

ответ

4

Когда вы вычислите выражение в интерактивном сеансе интерпретатора, sys.displayhook затем вызывается с результатом:

sys.displayhook(value)

Если значение не None, эта функция печатает его sys.stdout и сохраняет его в __builtin__._.

sys.displayhook вызывается в результате вычисления выражения , введенного в интерактивную сессию Python. Отображение этих значений может быть настроено путем назначения другой функции с одним аргументом в sys.displayhook.

Итак, это функция, которая в конечном итоге несет ответственность за создание _. Его документация, возможно, немного ... ах, минимальный ... но услужливо python 3.4 docs вдаваться в подробность и даже обеспечивает чисто питон воспроизведение его реализации по умолчанию:

def displayhook(value): 
    if value is None: 
     return 
    # Set '_' to None to avoid recursion 
    builtins._ = None 
    text = repr(value) 
    try: 
     sys.stdout.write(text) 
    except UnicodeEncodeError: 
     bytes = text.encode(sys.stdout.encoding, 'backslashreplace') 
     if hasattr(sys.stdout, 'buffer'): 
      sys.stdout.buffer.write(bytes) 
     else: 
      text = bytes.decode(sys.stdout.encoding, 'strict') 
      sys.stdout.write(text) 
    sys.stdout.write("\n") 
    builtins._ = value 

Если вы все еще интересно, почему это все кажется немного недооцененным, это, скорее всего, специально - это деталь реализации интерпретатора CPython, хотя и была скопирована в любой другой REPL, который я лично пережил.