"print(1) and print("0") return 在 python 中的表达式是什么?

What does the expression "print(1) and print("0") return in python?

正在学习Python 3、据我所知,Python3returnNone中的print()函数。我可以找到一个网站 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

我用 "or" 运算符尝试了这个,结果更让我吃惊。
None or None 应该 return 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.

这种行为背后的原因是什么? "or" 运算符 return 不应该只有一个值吗?请帮帮我。

逻辑运算符执行short-circuit evaluation.

这意味着对于 and,右侧 os 仅在左侧为 "true" 时才计算。对于 or,如果左侧是 "true",则右侧是 而不是 评估。

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

or 类似,因为左侧不是 "true",右侧将执行。

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

"Returning" 和 "printing" 是不同的东西。 print 将始终 return None 并打印您提供的任何内容(如果调用)。让您感到惊讶的是布尔运算符的行为,而不是 print.

x or y 定义为 "The value of x if truthy; else, the value of y".

x and y 定义为 "The value of x if falsy; else, the value of y".

重要的是,如果 x 符合运算符的标准,则不会评估 y。这称为短路,对于 andor 运算符来说非常独特。

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