鱼C论坛

 找回密码
 立即注册
查看: 2322|回复: 7

[已解决]短路逻辑

[复制链接]
发表于 2023-3-22 15:11:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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?
最佳答案
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 or  6  短路=4
4 or 9 短路=4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-22 15:22:46 From FishC Mobile | 显示全部楼层
本帖最后由 wp231957 于 2023-3-22 15:25 编辑

and.前后真值取后面
or前后真值取前面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-22 15:42:25 From FishC Mobile | 显示全部楼层
false  and  任何   都等于false   所以后面的会被短掉
true   or  任何  都等于true  所以后面的会被短掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-3-22 16:40:03 | 显示全部楼层
wp231957 发表于 2023-3-22 15:42
false  and  任何   都等于false   所以后面的会被短掉
true   or  任何  都等于true  所以后面的会被短掉

是不是还漏了……:

false  or  任何   ……
true   and  任何 ……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-22 17:04:54 From FishC Mobile | 显示全部楼层
本帖最后由 wp231957 于 2023-3-22 18:08 编辑
lzb1001 发表于 2023-3-22 16:40
是不是还漏了……:

false  or  任何   ……


这两个都是不短路的
所以才有true and  true   =后面值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-22 20:56:07 | 显示全部楼层
本帖最后由 lzb1001 于 2023-3-22 21:01 编辑
wp231957 发表于 2023-3-22 17:04
这两个都是不短路的
所以才有true and  true   =后面值


false and  任何   都等于false  所以后面的会被短掉
true  or  任何  都等于true  所以后面的会被短掉
false or  任何   ……
true  and  任何    ……
后两个都是不短路的,所以才有:
true   and  true = 后面值
False  or    False = 后面值

注:不知道为何上面一大堆字符,所以截图如下:

微信截图_20230322205945.png

上面的规则对吗?对的话,套用上面的规则对应怎么理解0 or 0 or 4 or 6 or 9的返回值是4?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-22 21:06:01 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
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 or  6  短路=4
4 or 9 短路=4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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

哦,原来是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 05:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表