为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2021-06-14 14:47:18
我正在学习 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。这种行为背后的原因是什么?“或”运算符不应该只返回一个值吗?请帮帮我。
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

逻辑运算符执行短路评估

这意味着对于and,右侧 os 仅在左侧为“true”时才进行评估。而对于or右手边评估,如果左侧是“真”。

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

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

至于你得到的输出,它是print函数调用的输出。使用and仅从左侧print调用中or获得输出,同时从两个调用中获得输出。


查看完整回答
反对 回复 2021-06-15
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

“返回”和“打印”是不同的东西。如果调用,print将始终返回None并打印您提供的任何内容。令您惊讶的是布尔运算符的行为,而不是print.

x or y被定义为“ xif truey 的值;else 的值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,因为不可能发生短路)。


查看完整回答
反对 回复 2021-06-15
  • 2 回答
  • 0 关注
  • 554 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信