Python 为什么键入变量(或表达式)会将值打印到标准输出?

Python 为什么键入变量(或表达式)会将值打印到标准输出?,python,ipython,read-eval-print-loop,python-interactive,Python,Ipython,Read Eval Print Loop,Python Interactive,举个例子: >>> 5+10 15 >>> a = 5 + 10 >>> a 15 Python在没有显式print语句的情况下如何以及为什么这样做 如果我在单元格中执行相同的操作,则只有最后一个这样的值以这种方式打印在标准输出上: In[1]: 5+10 1 Out[1]: 1 为什么会发生这种情况?所有口译员都是这样工作的。他们不需要任何打印,只需要一件事,如果没有打印,他们会做所有事情的报告,而打印则不需要,例如:

举个例子:

>>> 5+10
15
>>> a = 5 + 10
>>> a
15
Python在没有显式print语句的情况下如何以及为什么这样做

如果我在单元格中执行相同的操作,则只有最后一个这样的值以这种方式打印在标准输出上:

In[1]: 5+10
       1

Out[1]: 1

为什么会发生这种情况?

所有口译员都是这样工作的。他们不需要任何
打印
,只需要一件事,如果没有
打印
,他们会做所有事情的
报告
,而
打印
则不需要,例如:

>>> 'blah'
'blah'
>>> print('blah')
blah
>>> 
看看这些引文

另请参见:

>>> print(repr('blah'))
'blah'
>>> 
repr
也会这样做。

当Python处于“交互”模式时,它会启用某些在非交互模式下没有的行为。例如,最初在中指定

如果值不是None,则此函数将其打印到sys.stdout,并将其保存在
\uuuuu builtin\uuuu.

对交互式Python会话中输入的表达式求值的结果调用sys.displayhook

您可以修改此行为:

>>> 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 repl中,
sys.displayhook

>>> import sys;
>>> sys.displayhook
<built-in function displayhook>
导入系统; >>>sys.displayhook 但在IPython是

In [1]: import sys

In [2]: sys.displayhook
Out[2]: <IPython.terminal.prompts.RichPromptDisplayHook at 0x7f630717fa58>
[1]中的
:导入系统
在[2]中:sys.displayhook
出[2]:

这就是为什么您会看到Python和IPython的行为不同。

对IPython的行为有任何评论吗?假设在交互模式下,CPython就是这样工作的。