【发布时间】:2020-08-07 12:14:47
【问题描述】:
考虑以下代码:
class Greet:
def __init__(self, greeting='Hello'):
print(greeting)
if __name__ == '__main__':
print('Initializing and assigning')
greet = Greet('Shalom!')
print('Only initializing a class')
Greet()
如果我运行脚本,我会得到输出:
Initializing and assigning
Shalom!
Only initializing a class
Hello
但是,假设我在交互式 REPL 中运行上述代码,交互如下:
In 1> greet = Greet('Shalom!')
Shalom!
In 2> Greet()
Hello
<__main__.Greet object at 0x7fac80cc84c0>
如果您注意到,在第二个输入(即Greet())中,我会得到第二行,我相信该对象的repr 会导致输入的评估。这个额外的输出叫什么?因为在我看来,这是 REPL 本身的一个怪癖。
【问题讨论】:
-
在交互式 shell 中,将打印任何评估为非
None值的表达式(不是赋值)。这不会发生在脚本中。除了实际的print语句之外,您还会看到此输出。如果你改用greet2 = Greet(),那么你就不会看到这个了。 -
谢谢。这就是答案!
标签: python read-eval-print-loop