为什么在交互式控制台中输出此代码打印输出?
>>> def a():
... return 1
...
>>> for i in range(3):
... a()
...
1
1
1
>>>
我希望没有输出。这种行为记录在哪里?
答案 0 :(得分:5)
在交互模式下,任何表达式语句的结果都是打印,如果它不是None
。如doc中所述。
使用表达式语句(主要是交互式)来计算和写入值[...]
在交互模式下,如果值不是
None
,则转换为a 使用内置repr()
函数的字符串,结果字符串是 写入标准输出
示例:
>>> 1 + 1
2
>>> a()
1
>>> None # This expression is not printed
>>>
对于循环中的表达式语句也是如此。
>>> for i in range(3):
>>> a()
1
1
1
虽然这是特定于交互式shell的。如果您将代码作为脚本运行,则不会打印任何内容。
答案 1 :(得分:4)
如果使用控制台/交互式提示符/ IDLE / shell / Python shell / potato,则会打印返回的值,并且不需要print()
。这就是为什么你可以在shell中执行>>> 1+1
而它会说2
,即使你创建了一个1+1
的程序,它也会运行而没有错误或输出。
还有一点细节:没有打印值,repr
是。这就是shell发生这种情况的原因:
>>> print("something")
something
>>> "something"
"something"
>>> 'a string with "quotes"'
'a string with "quotes"'
您可以对此进行快速测试:
>>> class Test:
... def __str__(self): return "str"
... def __repr__(self): return "repr"
>>> test_instance = Test()
>>> test_instance
repr
>>> print(test_instance)
str
答案 2 :(得分:3)