Когда Python находится в «интерактивном» режиме, он допускает определенные поведения, которых он не имеет в неинтерактивном режиме.Например, sys.displayhook
, изначально указанный в PEP 217 .
Если значение не None, эта функция печатает его в sys.stdout, исохраняет его в __builtin__._
.
sys.displayhook вызывается в результате оценки выражения, введенного в интерактивном сеансе Python.
Вы можете изменить это поведение:
>>> import sys
>>> def shook(expr):
... print(f'can haz {expr}?')
...
>>> sys.displayhook = shook
>>> 123
can haz 123?
>>> False
can haz False?
>>> None
can haz None?
И также установите его в нормальное состояние:
>>> sys.displayhook = sys.__displayhook__
>>> 3
3
В реплере Python по умолчанию sys.displayhook
равно
>>> import sys;
>>> sys.displayhook
<built-in function displayhook>
, но в IPython это
In [1]: import sys
In [2]: sys.displayhook
Out[2]: <IPython.terminal.prompts.RichPromptDisplayHook at 0x7f630717fa58>
Так вот почему вы видите разное поведение между Python и IPython.