猿问

python中的表达式“print(1)和print(”0”)返回什么?

我正在学习 Python 3。据我所知,Python 3 中的 print() 函数返回None。我可以在这里找到一个网站,说同样的话。
在这种情况下,当我们在两个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

这种行为背后的原因是什么?“或”运算符不应该只返回一个值吗?请帮帮我。


波斯汪
浏览 555回答 2
2回答

三国纷争

逻辑运算符执行短路评估。这意味着对于and,右侧 os 仅在左侧为“true”时才进行评估。而对于or右手边不评估,如果左侧是“真”。在 Python 中,该值None不是“true”,and语句的右侧将不会执行。同样对于or,由于左侧不是“真”,右侧将执行。至于你得到的输出,它是print函数调用的输出。使用and仅从左侧print调用中or获得输出,同时从两个调用中获得输出。

慕莱坞森

“返回”和“打印”是不同的东西。如果调用,print将始终返回None并打印您提供的任何内容。令您惊讶的是布尔运算符的行为,而不是print.x or y被定义为“ xif truey 的值;else 的值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,因为不可能发生短路)。
随时随地看视频慕课网APP

相关分类

Python
我要回答