以这个例子为例:
>>> 5+10
15
>>> a = 5 + 10
>>> a
15
Python如何以及为什么在没有显式打印语句的情况下执行此操作?
如果我在IPython单元中执行相同的操作,则实际上只有最后一个这样的值以这种方式打印在stdout上:
In[1]: 5+10
1
Out[1]: 1
为什么会这样?
答案 0 :(得分:35)
当Python处于“交互式”模式时,它将启用非交互式模式中没有的某些行为。例如,最初在sys.displayhook
中指定的PEP 217。
如果值不为None,则此函数将其打印到sys.stdout,并将其保存在
在评估在交互式Python会话中输入的表达式的结果时会调用__builtin__._
中。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版本中,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之间行为不同的原因。
答案 1 :(得分:2)
这就是所有口译员的工作方式。他们不需要任何print
,但只有一件事,没有print
,他们就可以完成所有事情的repr
,而print
则不需要,例如:
>>> 'blah'
'blah'
>>> print('blah')
blah
>>>
看报价。
也请参见:
>>> print(repr('blah'))
'blah'
>>>
repr
也是一样。