dan*_*705 2 python terminal python-3.x read-eval-print-loop
在终端弄乱python时,我发现了一些奇怪的东西.如果你输入一个像这样的表达式1+2*3,终端将输出7,这很奇怪,因为这不应该打印任何东西,但确实如此.但是如果你使用诸如print("hello world")之类的函数,它将输出hello world,而不是Noneprint返回的内容.此外,键入True输出True和False输出False,但键入None不输出任何内容.python如何决定何时输出值?
确切地说,评估表达式时会发生什么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)
你看到的是一个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方法,从而打印结果的文本表示.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |