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

时间:2018-09-11 06:48:21

标签: python printing conditional

我正在学习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

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

2 个答案:

答案 0 :(得分: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的结果,因为不可能发生短路。

答案 1 :(得分:3)

逻辑运算符执行short-circuit evaluation

这意味着对于and,仅当左侧为“ true”时才评估右侧os。对于or,如果左侧为“ true”,则不评估右侧

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

or类似,由于左侧不为“ true”,因此右侧将执行。

对于您获得的输出,它是print函数调用的输出。使用and只能从左侧的print调用中获取输出,而使用or可以从两个调用中获取输出。