2016-09-22 4 views
4

Я думал, что дисплей в интерактивном режиме Python всегда был равен print(repr()), но это не так для None. Является ли это языковой функцией или я что-то упускаю? Спасибо«Нет» не отображается, как я ожидал, в интерактивном режиме Python

>>> None 
>>> print(repr(None)) 
None 
>>> 
+4

Как вы подразумеваете * как ожидалось *? FWIW, 'None' не является ничем –

+0

@MosesKoledoye Я имею в виду *, как я ожидал *, конечно, я ожидал, что он будет вести себя как что-нибудь еще, когда' print (repr()) 'дает тот же результат, извинения –

+2

Из [docs] (https://docs.python.org/3/reference/simple_stmts.html#expression-statements) "В интерактивном режиме, если значение не' None', оно преобразуется в строку с использованием встроенного 'repr() ', и результирующая строка записывается в стандартный вывод в строке сама по себе (кроме случаев, когда результат« Нет », поэтому вызовы процедур не вызывают никакого вывода.)« –

ответ

2

Да, это поведение является преднамеренным.

От Python docs

7.1. заявления Expression

Expression отчетность используется (в основном в интерактивном режиме), чтобы вычислить и записать значение, или (как правило), чтобы вызвать процедуру (функцию, которая возвращает никаких значимых результатов; в Python, процедуры возвращают значение None) , Другие использования выражений выражения допускаются, и иногда полезно.Синтаксис для выражения утверждения:

expression_stmt ::= starred_expression 

Выражение оператор оценивает список выражений (который может быть одно выражение).

В интерактивном режиме, если значение не None, он преобразуется в строку с помощью встроенного в repr() функции и полученная строка записывается в стандартный вывод на отдельной строке (за исключением случаев, результате None, так что вызовы процедур не вызывают никакого выхода.)

4

Это преднамеренная функция. Если выполняемый вами код python оценивается в точности None, то он не отображается.

Это полезно много раз. Например, вызов функции с побочным эффектом может быть полезен, и такие функции фактически возвращают None, но вы обычно не хотите видеть результат.

Например, вызов print() возвращается None, но вы обычно не хотят видеть его:

>>> print("hello") 
hello 
>>> y = print("hello") 
hello 
>>> y 
>>> print(y) 
None 
1

В Python, есть функция, которая не возвращает ничего, но вызывается только для его побочных эффектов на самом деле возвращает Никто. Поскольку такие функции достаточно распространены, интерактивный интерпретатор Python не печатает ничего в этом случае. По расширению он ничего не печатает, когда интерактивное выражение оценивается как «Нет», даже если оно не является вызовом функции.

Если можно ввести в заблуждение новичков, потому что у вас есть

>>> a = 1 
>>> a 
1 
>>> 

но

>>> a = None 
>>> a 
>>> 

, но на самом деле дизайн

1

None представляет отсутствие значения, но отсутствие. Потому что он представляет что-то в Python, его __repr__ не может вернуть ничего; None - ничто.

Результат преднамеренный. Если, например, функция возвращает None (аналогично отсутствию оператора возврата), возвращаемое значение вызова такой функции не отображается на консоли, поэтому, например, print(None) не печатаетNone в два раза, так как функция print одинаково возвращается None.

На боковой ноте print(repr()) поднимет TypeError в Python.

+0

Спасибо, это полезно. Возможно, это может быть проиллюстрировано еще чем-то вроде 'print (print (2))', который отображает '2' и' None' –

+0

@Chris_Rands Точно! –

+0

"' print (repr()) 'поднимет TypeError в Python." --- Это происходит от 'repr()', для чего требуется аргумент, а не 'print'. 'print (repr (None))' печатает строку '' None'', которая появляется на консоли без кавычек: 'None' (как при запуске сценария командной строки, так и в интерактивном режиме). –

Смежные вопросы