在终端弄乱python时,我注意到一些奇怪的事情。如果你输入一个像1+2*3
这样的表达式,终端会输出7,这很奇怪,因为它不应该打印任何东西,但确实如此。但是如果你使用诸如print之类的函数(" hello world"),它将输出hello world
,而不是None
,这是print返回的内容。此外,输入True
输出True
和False
输出False
,但输入None
不会输出任何内容。 python如何决定何时输出值?
答案 0 :(得分:8)
评估表达式时究竟发生了什么,由sys.displayhook
确定。来自docs:
<强>
sys.displayhook(value)
强>如果
在评估在交互式Python会话中输入的表达式的结果上调用value
不是None
,则此功能会将其打印到sys.stdout
,并将其保存在__builtin__._
中。
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。