为什么在REPL中使用'print'(或使用'return'输出任何内容),会得到额外的输出,但在脚本中却没有?
为什么在REPL中使用'print'(或使用'return'输出任何内容),会得到额外的输出,但在脚本中却没有?
假设我创建了一个简单的脚本hello.py
,其中只包含以下内容:\n
print('hello world')
\n当我运行它时,输出中只会显示hello world
。如果我在解释器提示符(REPL)中尝试相同的代码,结果也是一样的:\n
>>> print('hello world') hello world
\n但是,如果我尝试更复杂的内容,比如:\n
print('hello'), print('world')
\n当我运行脚本时,我会得到每个单词占一行的输出,这正是我期望的。但是在REPL中:\n
>>> print('hello'), print('world') hello world (None, None)
\n为什么会有额外的(None, None)
输出?为什么在第一个示例中没有额外的输出?\n
\n类似地,如果我尝试调用一个函数:\n
def example(): return 1 example()
\n我不会看到任何输出,如预期那样,因为return
不是print
。但是在REPL中,我确实看到了结果:\n
>>> def example(): ... return 1 ... >>> example() 1
\n这似乎很有用,也可能是有意的,但我不确定为什么或者它是如何发生的。我知道在3.x中print
是一个函数。既然我无论如何都在使用一个函数,这是否可能与此有关?
问题背景
在Python的REPL(交互式解释器)中使用print
语句时,会产生额外的输出。然而,在脚本中使用print
语句时,却没有出现额外的输出。这是为什么呢?同样地,在REPL中使用return
语句时也会产生输出,但在脚本中却没有输出。这个问题的出现原因是什么?有什么解决方法呢?
问题原因
1. 在Python中,print
是一个函数。当调用print
函数时,它会返回一个特殊的值None
。
2. Python中的函数调用是一个表达式,必须返回一个值。如果函数在结束时没有显式地返回值,那么隐式地返回None
。
3. print
函数的目的是显示输出,而不是返回格式化的文本。
4. 程序在命令行运行时,通过将输出写入标准输出流来显示文本。
问题解决方法
1. 如果想要在REPL中使用print
语句时只显示输出而不返回值,可以在每个print
语句后添加一个逗号,例如print('hello'), print('world')
。
2. 如果想要在脚本中使用print
语句时只显示输出而不返回值,可以直接调用print
函数,例如print('hello world')
。
3. 如果想要在函数中使用print
语句时只显示输出而不返回值,可以直接调用print
函数,例如print('hello world')
。
4. 如果想要在REPL或脚本中使用return
语句时只返回值而不显示输出,可以将函数的返回值赋给一个变量,并在需要的时候显示这个变量的值,例如result = example()
和print(result)
。
总结
print
函数在REPL和脚本中的行为是不同的。在REPL中,print
函数会显示输出,并隐藏返回值为None
的情况。而在脚本中,print
函数只显示输出,不返回值。如果想要在REPL中只显示输出而不返回值,可以在每个print
语句后添加一个逗号。如果想要在脚本中只显示输出而不返回值,可以直接调用print
函数。如果想要在函数中只显示输出而不返回值,可以直接调用print
函数。如果想要在REPL或脚本中只返回值而不显示输出,可以将函数的返回值赋给一个变量,并在需要的时候显示这个变量的值。