我正在学习Python 3.据我所知,Python 3中的print()函数返回None
。我可以找到一个网站here说同样的事情。
在这种情况下,当我们在两个print()
函数之间应用“and”运算符时,它应该打印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
。
这种行为背后的原因是什么? “或”运算符不应该只返回一个值吗?请帮帮我。
逻辑运算符执行short-circuit evaluation。
这意味着对于and
,右侧的操作系统仅评估左侧是否为“真”。而对于or
,如果左侧是“真实”,则不评估右侧。
在Python中,值None
不是“true”,and
语句的右侧不会执行。
同样对于or
,由于左侧不是“真”,右侧将执行。
至于你得到的输出,它是print
函数调用的输出。使用and
,您只能从左侧print
调用获得输出,使用or
可以获得两次调用的输出。
“回归”和“印刷”是不同的事情。 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
的结果,因为没有短路是可能的) )。