Skip to content

Latest commit

 

History

History
180 lines (130 loc) · 3.5 KB

File metadata and controls

180 lines (130 loc) · 3.5 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0164
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

逻辑判断的短路问题

回忆

  • 上次了解的是优先级
  • 每个运算符都有自己的优先级位置
  • 逻辑运算符的优先级从高到低
    • not
    • and
    • or
  • and 和 or 这两个都是二元运算符
    • 两个参数 左右位置不同
      • 有影响吗?🤔

我们试一下

print("o") or True
True or print("o")
  • 同样是两个值进行或运算
    • 为什么 第一个就可以输出o

图片描述

  • 而 第二个 就不输出o 呢?

短路作用

  • 首先 我们要明确 print的 返回值是多少
print(print("o"))
  • print函数的返回值 是
    • None
    • 啥也不是

图片描述

  • 啥也不是 None
    • 对应的 布尔值 是多少?

深入

bool(None)
  • None所对应的 布尔值 是
    • False

图片描述

  • 所以 print("o") 对应的布尔值 是多少?

对应

bool(print("o"))
  • print("o") 对应的布尔值

图片描述

  • print("o") 对应的布尔值是 False

回到最初

  • 先计算
    • or左边的 print("o")
      • 输出了o
      • 结果为False
  • 再计算
    • or右边的 True
      • 结果为True
  • 最终
    • False or True
      • 结果为 True

图片描述

  • 先计算
    • or左边的 True
      • 结果为True
    • 不管or右边
      • 是True
      • 还是False
  • 最终
    • 结果都为True
      • 于是右边部分 被跳过
      • 不输出o

图片描述

  • 这种被跳过的部分叫做被短路

短路

  • 在有水的时候
    • 电路走的是水滴这条路
    • 灯泡被短路
    • 电池被烧坏

图片描述

  • 这种现象就是短路
  • or
    • 发现左边已经是True了
    • 右边就不管了
    • 直接短路了
  • and 有这种短路现象吗?

and 的短路

  • 下图中
    • 第一句 and 右边 就被短路了

图片描述

  • 官方文档如何介绍短路呢?

官方文档

  • 蓝框中介绍了 and的短路规则
    • x and y
      • 先 计算x
        • 如果 x为False
          • 直接返回

图片描述

  • 红框中介绍了 or的短路规则
    • x or y
      • 先 计算x
        • 如果 x为True
          • 直接返回

文档说法

图片描述

  • 我们去总结

总结

  • 这次了解了and 和 or的短路规则
    • 从左到右 进行计算
    • 如果 and左边是False
      • and右边被短路
    • 如果 or左边是True
      • or右边被短路
  • 这个规则被验证了一半
    • 因为print("o")的返回值为False
    • 找不到返回值为True而且有输出的函数...

图片描述

  • 除了 非与或之外
    • 还有什么其他的运算符吗??🤔

图片描述

  • 下次再说 👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。