为什么键入变量(或表达式)将值打印到stdout?

发布于 2021-01-29 14:58:54

举个例子:

>>> 5+10
15
>>> a = 5 + 10
>>> a
15

如果没有显式的print语句,Python如何以及为什么这样做?

如果我在IPython单元中执行相同的操作,则实际上只有最后一个这样的值以这种方式打印在stdout上:

In[1]: 5+10
       1

Out[1]: 1

为什么会这样?

关注者
0
被浏览
81
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    如果value不为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 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之间行为不同的原因。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看