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

dan*_*705 2 python terminal python-3.x read-eval-print-loop

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

Ale*_*all 8

确切地说,评估表达式时会发生什么sys.displayhook.来自文档:

sys.displayhook(value)

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

sys.displayhook调用在交互式Python会话中输入的表达式的结果.可以通过为其分配另一个单参数函数来自定义这些值的显示sys.displayhook.

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

>>> def new_hook(x):
...   print(repr(x))
...   
>>> sys.displayhook = new_hook
>>> 3
3
>>> None
None
Run Code Online (Sandbox Code Playgroud)


Wil*_*sem 7

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

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

例如:

>>> None  # None is not printed
>>> a = 2 # assignments are not printed
>>> 
Run Code Online (Sandbox Code Playgroud)

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

  • 它永远不是一种表达方式.这是一个声明. (2认同)