'无'没有像我在Python交互模式中所期望的那样显示

时间:2016-09-22 12:40:20

标签: python

我认为Python交互模式下的显示始终等同于print(repr()),但None并非如此。这是一种语言功能还是我错过了什么?谢谢

>>> None
>>> print(repr(None))
None
>>>

4 个答案:

答案 0 :(得分:4)

这是一个刻意的功能。如果您运行的python代码的计算结果为None,则不会显示它。

这在很多时候很有用。例如,调用具有副作用的函数可能很有用,并且此类函数实际返回None,但您通常不希望看到结果。

例如,调用print()会返回None,但您通常不希望看到它:

>>> print("hello")
hello
>>> y = print("hello")
hello
>>> y
>>> print(y)
None

答案 1 :(得分:2)

是的,这种行为是有意的。

来自Python docs

  

7.1。表达式陈述

     

使用表达式语句(主要是交互式)来计算和   写一个值,或(通常)调用一个过程(一个函数)   没有有意义的结果;在Python中,过程返回值   None)。表达式语句的其他用法是允许的   偶尔有用。表达式语句的语法是:

expression_stmt ::=  starred_expression
     

表达式语句计算表达式列表(可能是   单表达。)

     

在交互模式下,如果值不是None,则转换为a   使用内置repr()函数和结果字符串的字符串   在一行上写入标准输出(除非是   结果是None,因此过程调用不会导致任何输出。)

答案 2 :(得分:1)

在Python中,一个不返回任何东西但仅为其副作用调用的函数实际上返回None。由于这些函数很常见,因此Python交互式解释器在这种情况下不会打印任何内容。通过扩展,当交互式表达式求值为None时,它不会打印任何内容,即使它不是函数调用。

如果因为你有

可能会误导初学者
>>> a = 1
>>> a
1
>>>

但是

>>> a = None
>>> a
>>>

但确实按设计

答案 3 :(得分:1)

None表示没有值,但可以观察到缺席。因为它代表Python中的某些东西,它的__repr__不可能返回 ; None并非一无所获。

结果是刻意的。例如,如果函数返回None(类似于没有return语句),则对此类函数的调用的返回值不会显示在控制台中,因此例如print(None)不会打印 None两次,因为函数print同样返回None

在旁注中,print(repr())将在Python中引发TypeError