鱼C论坛

 找回密码
 立即注册
查看: 1197|回复: 11

[已解决]什么是短路逻辑

[复制链接]
发表于 2018-3-18 15:52:04 | 显示全部楼层 |阅读模式

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

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

x
为什么3 and 4 == 4,    4 or 3 == 3.
怎么判断3和4哪个是真,哪个是假
有什么规律吗?
最佳答案
2018-3-18 16:03:32
对于and,只有两个都为True时才为True,显然第一个为False时就不用判断第二个了。
对于or两个有一个为True就为True,第一个为True就不用判断第二个了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 16:03:32 | 显示全部楼层    本楼为最佳答案   
对于and,只有两个都为True时才为True,显然第一个为False时就不用判断第二个了。
对于or两个有一个为True就为True,第一个为True就不用判断第二个了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 16:15:52 | 显示全部楼层
短路逻辑
表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出
or 左侧表达式 。

表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到
or 的左侧,参与接下来的逻辑运算。

若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。

例子:


  1. user = 'nicholas'
  2. psswd ='123'
  3. v = user == 'nicholas' and passwd == '123' or 1 == 2 and pwd == '9876'
  4. print(v)
复制代码

  

分析:
v = true and true or
此时不用继续计算即可得出v为真的结果,不用考虑布尔运算的优先级,注意这个运算是从左到右的,**而非看到and自动进行运算而后从左到右运算**

一些结论:
从左到右
(1)第一个表达式 or
True or ————>>得出结果True
(2)第一个表达式 and
True and ————>>继续运算
(3)第一个表达式 or
False or ————>>继续运算
(4)第一个表达式 and
False and ————>>得出结果False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-18 16:16:06 | 显示全部楼层
冬雪雪冬 发表于 2018-3-18 16:03
对于and,只有两个都为True时才为True,显然第一个为False时就不用判断第二个了。
对于or两个有一个为True ...

我就是想问3 and 4== 4是怎么判断3为Flase的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-18 16:33:05 | 显示全部楼层
tifa2018 发表于 2018-3-18 16:15
短路逻辑
表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 ...

数字 and(or) 数字   。怎么知道哪个数字是Flase,哪个数字是ture?
比如:7 and 8 and 9   输出的结果是什么?(求解释)怎么知道哪个是数字是真哪个数字是假?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 16:36:37 | 显示全部楼层
天健再 发表于 2018-3-18 16:16
我就是想问3 and 4== 4是怎么判断3为Flase的?

3 and 4,只有两个都为True时才为True,因此需再判断第二个数,第二个为4是True,所以整体为True,去第二个数的值为4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 16:39:32 | 显示全部楼层
天健再 发表于 2018-3-18 16:16
我就是想问3 and 4== 4是怎么判断3为Flase的?

3并不是false,3是true,只是 and 的话只有判断全部为 true 或有一个为 false它才会退出。
3 and 4, 3是true,但是整体是true还是false它不知道,那它就会继续执行到 4 那里,4 也是 true,它知道整体已经是true了,所以它就退出了,返回最后那个位置的数,也就是  4。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 16:40:24 | 显示全部楼层
天健再 发表于 2018-3-18 16:33
数字 and(or) 数字   。怎么知道哪个数字是Flase,哪个数字是ture?
比如:7 and 8 and 9   输出的结果是 ...

输出 9。所有非 0 的数都是 true ,小甲鱼在视频里应该是说过的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-18 16:41:32 | 显示全部楼层
懂了懂了,谢谢各位大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 16:47:43 | 显示全部楼层
天健再 发表于 2018-3-18 16:16
我就是想问3 and 4== 4是怎么判断3为Flase的?

在 Python 看来,只有以下内容会被看作假(注意冒号括号里边啥都没有,连空格都不要有!):False None 0 "" '' () [] {}

其他一切都被解释为真!

  1. bool(3 and 4)
复制代码

输出结果
True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-18 16:54:48 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-3-18 16:40
输出 9。所有非 0 的数都是 true ,小甲鱼在视频里应该是说过的。

可能骚不留神就没看到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 00:05:42 | 显示全部楼层
谢谢大家我也懂了!~  这个兄台说的真到点子上了‘所有非0的数字都是true’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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