lzb1001 发表于 2023-3-22 15:11:59

短路逻辑

本帖最后由 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:22:46

本帖最后由 wp231957 于 2023-3-22 15:25 编辑

and.前后真值取后面
or前后真值取前面

wp231957 发表于 2023-3-22 15:42:25

falseand任何   都等于false   所以后面的会被短掉
true   or任何都等于true所以后面的会被短掉

lzb1001 发表于 2023-3-22 16:40:03

wp231957 发表于 2023-3-22 15:42
falseand任何   都等于false   所以后面的会被短掉
true   or任何都等于true所以后面的会被短掉

是不是还漏了……:

falseor任何   ……
true   and任何 ……

wp231957 发表于 2023-3-22 17:04:54

本帖最后由 wp231957 于 2023-3-22 18:08 编辑

lzb1001 发表于 2023-3-22 16:40
是不是还漏了……:

falseor任何   ……


这两个都是不短路的
所以才有true andtrue   =后面值

lzb1001 发表于 2023-3-22 20:56:07

本帖最后由 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?

wp231957 发表于 2023-3-22 21:06:01

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

lzb1001 发表于 2023-3-22 21:26:51

wp231957 发表于 2023-3-22 21:06
0 or 0 or 4 or 6 or 9的返回值是4?
这玩意如果没有括号就是从左往右算
0 or0=0


哦,原来是这样
页: [1]
查看完整版本: 短路逻辑