我正在学习Python3。据我所知,Python 3中的print()函数返回None
。我可以找到一个网站here说同样的话。
在那种情况下,当我们在两个print()
函数之间应用“和”运算符时,它应打印None
,因为None and None = None
。我使用各种打印功能进行了尝试,结果似乎与我期望的完全不同。这是结果。我在Microsoft Visual Studio 2015中测试了它们
print(0) and print(0)
打印0
。
print(0) and print(1)
打印0
。
print(1) and print(0)
打印1
。
print(1) and print(1)
打印1
。
我使用“或”运算符尝试了此操作,结果令我更加惊讶。
None or None
应该返回None
。这是结果。
print(0) or print(0)
打印0 0
。
print(0) or print(1)
打印0 1
。
print(1) or print(0)
打印1 0
。
print(1) or print(1)
打印1 1
。
这种行为背后的原因是什么? “或”运算符不应该只返回一个值吗?请在这里帮助我。
答案 0 :(得分:4)
“返回”和“打印”是不同的东西。 print
将始终返回None
并打印您提供的任何内容(如果调用)。让您惊讶的是布尔运算符的行为,而不是print
。
x or y
定义为“如果正确,则x
的值;否则,定义y
的值。”
x and y
定义为“如果虚假,则为x
的值;否则为y
的值。”
重要的是,如果y
符合运营商的标准,则不会评估x
。这称为短路,并且对于and
和or
运算符来说非常独特。
现在,None
是一个伪造的值;因此None and y
永远不会评估y
,而None or y
将永远评估y
。这就是为什么您的print(...) and print(...)
打印一个值(由于短路而未执行第二个print
)以及print(...) and print(...)
打印两个值的原因(都需要进行评估以确定and
的结果,因为不可能发生短路。
答案 1 :(得分:3)
逻辑运算符执行short-circuit evaluation。
这意味着对于and
,仅当左侧为“ true”时才评估右侧os。对于or
,如果左侧为“ true”,则不评估右侧 。
在Python中,值None
不是“ true”,and
语句的右侧将不执行。
与or
类似,由于左侧不为“ true”,因此右侧将执行。
对于您获得的输出,它是print
函数调用的输出。使用and
只能从左侧的print
调用中获取输出,而使用or
可以从两个调用中获取输出。