以这个例子为例:
>>> 5+10
15
>>> a = 5 + 10
>>> a
15
Python如何以及为什么可以在没有显式的print语句的情况下完成这个操作?
如果我在IPython单元格中执行相同的操作,只有最后一个值会以这种方式实际打印在标准输出(stdout)中:
In[1]: 5+10
1
Out[1]: 1
为什么会发生这种情况?以这个例子为例:
>>> 5+10
15
>>> a = 5 + 10
>>> a
15
Python如何以及为什么可以在没有显式的print语句的情况下完成这个操作?
如果我在IPython单元格中执行相同的操作,只有最后一个值会以这种方式实际打印在标准输出(stdout)中:
In[1]: 5+10
1
Out[1]: 1
为什么会发生这种情况?当Python处于“交互”模式时,它会启用一些在非交互模式下没有的行为。例如,在PEP 217
中最初指定的 sys.displayhook
。
如果值不是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之间的不同行为。
print
,只需要一件事情,没有print
,它们会对所有内容进行repr
,而print
则不会,例如: "最初的回答"。>>> 'blah'
'blah'
>>> print('blah')
blah
>>>
看引用。
另请参阅:
>>> print(repr('blah'))
'blah'
>>>
repr
执行相同的操作。