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

问题描述 投票:1回答:2

我正在学习Python 3.据我所知,Python 3中的print()函数返回None。我可以找到一个网站here说同样的事情。 在这种情况下,当我们在两个print()函数之间应用“and”运算符时,它应该打印None因为None and None = None。我尝试了各种打印功能,结果似乎与我的期望非常不同。结果如下。我在Microsoft Visual Studio 2015中测试了它们

print(0) and print(0)打印0print(0) and print(1)打印0print(1) and print(0)打印1print(1) and print(1)打印1

我用“或”运算符尝试了这个,结果让我更加惊讶。 None or None应该返回None。结果如下。

print(0) or print(0)打印0 0print(0) or print(1)打印0 1print(1) or print(0)打印1 0print(1) or print(1)打印1 1

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

python printing conditional
2个回答
3
投票

逻辑运算符执行short-circuit evaluation

这意味着对于and,右侧的操作系统仅评估左侧是否为“真”。而对于or,如果左侧是“真实”,则不评估右侧。

在Python中,值None不是“true”,and语句的右侧不会执行。

同样对于or,由于左侧不是“真”,右侧将执行。

至于你得到的输出,它是print函数调用的输出。使用and,您只能从左侧print调用获得输出,使用or可以获得两次调用的输出。


4
投票

“回归”和“印刷”是不同的事情。 print将永远返回None并打印任何你给它的东西,如果被呼叫的话。令你惊讶的是布尔运算符的行为,而不是print

x or y被定义为“x的价值,如果真的;或者,y的价值”。

x and y被定义为“x的价值,如果是假的;否则,y的价值”。

至关重要的是,如果y符合运营商的标准,则不会评估x。这被称为短路,对andor运营商而言非常独特。

现在,None是一个虚假的价值;因此None and y永远不会评估y,而None or y将永远评估y。这就是为什么你的print(...) and print(...)打印一个值(由于短路而没有执行第二个print),以及为什么print(...) and print(...)打印两个(两者都需要进行评估以确定and的结果,因为没有短路是可能的) )。

© www.soinside.com 2019 - 2024. All rights reserved.