为什么Python数据类型在Python提示符中表现如此?

时间:2017-06-24 18:14:27

标签: python python-3.x terminal read-eval-print-loop

在终端弄乱python时,我注意到一些奇怪的事情。如果你输入一个像1+2*3这样的表达式,终端会输出7,这很奇怪,因为它不应该打印任何东西,但确实如此。但是如果你使用诸如print之类的函数(" hello world"),它将输出hello world,而不是None,这是print返回的内容。此外,输入True输出TrueFalse输出False,但输入None不会输出任何内容。 python如何决定何时输出值?

3 个答案:

答案 0 :(得分:8)

评估表达式时究竟发生了什么,由sys.displayhook确定。来自docs

  

<强> sys.displayhook(value)

     

如果value不是None,则此功能会将其打印到sys.stdout,并将其保存在__builtin__._中。

     在评估在交互式Python会话中输入的表达式的结果上调用

sys.displayhook。可以通过为sys.displayhook指定另一个单参数函数来自定义这些值的显示。

简单覆盖的示例,它消除了None特殊情况:

>>> def new_hook(x):
...   print(repr(x))
...   
>>> sys.displayhook = new_hook
>>> 3
3
>>> None
None

答案 1 :(得分:7)

你看到的是一个Python REPL(Read-Evaluate-Print-Loop)。

大多数REPL(包括Python&#39; REPL)将使用在线解析器:构建表达式树的解析器。从构建表达式树的那一刻起,REPL将评估它(这可以是函数定义,在这种情况下,函数被解析和分析)。评估后,REPL将获得结果并检查结果* 。如果 None,则不会打印结果。顺便说一句,分配也是如此。

例如:

>>> None  # None is not printed
>>> a = 2 # assignments are not printed
>>> 

如果结果是 None,那么它将调用repr(..)内置方法,从而打印文本表示结果

答案 2 :(得分:3)

终端中的python会话称为REPL或Read-Evaluate-Print-Loop,它接收输入,对其进行求值并返回结果。查看wikipedia page