为什么在REPL中使用'print'(或使用'return'输出任何内容),会得到额外的输出,但在脚本中却没有?

15 浏览
0 Comments

为什么在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是一个函数。既然我无论如何都在使用一个函数,这是否可能与此有关?

0
0 Comments

问题背景

在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或脚本中只返回值而不显示输出,可以将函数的返回值赋给一个变量,并在需要的时候显示这个变量的值。

0