短路逻辑
本帖最后由 lzb1001 于 2023-3-22 15:20 编辑>>> 0 and 8 and 9
0
>>> 1 and 8 and 9
9
>>> 0 or 8 or 9
8
>>> 1 or 8 or 9
1
问题1:
有没有什么规律或规则,无论上面怎么变换,无论表达式有几个数值,就能一眼看出返回值?
--------------------------------------
小甲鱼在课后作业中说:逻辑操作符有个有趣的特性:在不需要求值的时候不进行操作。这么说可能比较“高深”,举个例子,表达式 x and y,需要 x 和 y 两个变量同时为真(True)的时候,结果才为真。因此,如果当 x 变量得知是假(False)的时候,表达式就会立刻返回 False,而不用去管 y 变量的值。
这种行为被称为短路逻辑(short-circuit logic)或者惰性求值(lazy evaluation),这种行为同样也应用与 or 操作符,这个后边的课程小甲鱼会讲到,不急。
实际上,Python 的做法是如果 x 为假,表达式会返回 x 的值(0),否则它就会返回 y 的值
问题2:
以上适用于x、y两个变量,如果是x、y、z三个变量呢?比如0 or 0 or 4 or 6 or 9返回的值是4,为何不是6或9?
本帖最后由 wp231957 于 2023-3-22 15:25 编辑
and.前后真值取后面
or前后真值取前面 falseand任何 都等于false 所以后面的会被短掉
true or任何都等于true所以后面的会被短掉 wp231957 发表于 2023-3-22 15:42
falseand任何 都等于false 所以后面的会被短掉
true or任何都等于true所以后面的会被短掉
是不是还漏了……:
falseor任何 ……
true and任何 …… 本帖最后由 wp231957 于 2023-3-22 18:08 编辑
lzb1001 发表于 2023-3-22 16:40
是不是还漏了……:
falseor任何 ……
这两个都是不短路的
所以才有true andtrue =后面值 本帖最后由 lzb1001 于 2023-3-22 21:01 编辑
wp231957 发表于 2023-3-22 17:04
这两个都是不短路的
所以才有true andtrue =后面值
false and 任何 都等于false 所以后面的会被短掉
true or 任何 都等于true 所以后面的会被短掉
false or 任何 ……
true and 任何 ……
后两个都是不短路的,所以才有:
true and true = 后面值
Falseor False = 后面值
注:不知道为何上面一大堆字符,所以截图如下:
上面的规则对吗?对的话,套用上面的规则对应怎么理解0 or 0 or 4 or 6 or 9的返回值是4?
lzb1001 发表于 2023-3-22 20:56
false and 任何 都等于false 所以后面的会被短掉
true or ...
0 or 0 or 4 or 6 or 9的返回值是4?
这玩意如果没有括号就是从左往右算
0 or0=0
0 or 4=4
4 or6短路=4
4 or 9 短路=4 wp231957 发表于 2023-3-22 21:06
0 or 0 or 4 or 6 or 9的返回值是4?
这玩意如果没有括号就是从左往右算
0 or0=0
哦,原来是这样
页:
[1]