举个例子:
>>> 5+10 15 >>> a = 5 + 10 >>> a 15
如果没有显式的print语句,Python如何以及为什么这样做?
如果我在IPython单元中执行相同的操作,则实际上只有最后一个这样的值以这种方式打印在stdout上:
In[1]: 5+10 1 Out[1]: 1
为什么会这样?
当Python处于“交互式”模式时,它将启用非交互式模式中没有的某些行为。例如,sys.displayhook最初在PEP 217中指定。
sys.displayhook
如果value不为None,则此函数将其打印到sys.stdout,并将其保存在中__builtin__._。 sys.displayhook是在评估在交互式Python会话中输入的表达式的结果时调用的。
如果value不为None,则此函数将其打印到sys.stdout,并将其保存在中__builtin__._。
__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 repl中,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之间行为不同的原因。