Skip to content

Latest commit

 

History

History
336 lines (246 loc) · 7.87 KB

File metadata and controls

336 lines (246 loc) · 7.87 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0385
- 这是 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` 
---

比较运算符

nan

  • 浮点型(float) 的 nan 很特殊
    • 还有 精准十进制(Decimal)的 nan
    • 他们的任何比较都是 False!

图片描述

  • nan
    • not-a-number

图片描述

  • 这和 ieee754
    • 对于 这个行为的定义
    • 是一致的

试试

float("nan")
type(float("nan"))
float("nan") == float("nan") 
import decimal 
decimal.Decimal("nan")
decimal.Decimal("nan") == decimal.Decimal("nan")
  • 确实如手册所写
    • 所有和 nan 的比较运算结果
    • 都为 False
  • 但唯独除了一种情况

图片描述

  • 哪种情况呢?

细节

float("nan") != float("nan") 
  • 不等于的 情况

图片描述

  • NaN(not a number)
    • 在数学表示上表示一个无法表示的数
    • 无法描述的数不等于任何数
    • 无法描述的数也不等于无法描述的数
    • 和这个 nan 类似的 inf 是什么意思来着?

图片描述

  • 指数部分全 1 的话
    • 尾数部分不是全零就是 NaN
    • 尾数部分全零就是 inf
  • inf
    • infinite
  • 具体怎么理解呢?

回忆

  • 上次研究了
    • 大于
    • 小于
    • 等于
    • 不等于
  • 数字各个类型之间可以比较
  • 通过比较 可以把相对连续的量
    • 转化为 布尔类型
    • 也就是数字化

图片描述

  • inf
    • infinite
  • 具体怎么理解呢?

fine

  • fine
    • 金银的质量
      • 无瑕疵的
      • 纯度高的

图片描述

  • 能分得出来的
    • 最高质量的

图片描述

  • to make fine
    • 和解、解决争端
    • 作为对某种违法行为的惩罚而征收的钱款

finance

  • 债务到期了
    • 帐该清了
    • 得找钱
    • 找人提供资金

图片描述

  • financial
    • 金融的

refine

  • refine
    • re- 重新
    • fine 提纯

图片描述

  • 如果不够锋利,就需要
    • 精炼; 提纯;
    • 去除杂质;
    • 改进; 改善;
    • 使精练

finish

  • 终结 某件事情

    • 交钱了事
  • finish

    • 终点
    • 界限
    • 边界

图片描述

  • 生命的终点
    • 终止
    • 结束
  • 武器的锋利程度
    • 顶个尖儿的

final

  • final、finally
    • 最后

confine

  • confine
    • con- 全部
    • fine 界限

图片描述

  • 到处都是界限
    • confine
    • 限制

define

  • define
    • de- 强调
    • fine 边界

图片描述

  • 勾画出…的轮廓或外形:
    • 边界明确
      • 定型了
  • definitely
    • 下明确的定义
      • 有明确的形状

finish

  • fix
    • 精修之后

图片描述

  • finish、finished
    • 已经完成了

finite

  • finite [ˈfaɪnaɪt]
    • 有限的
      • fine- 界限、边界
      • -ite 有什么性质的
      • 有边界性质的

图片描述

  • infinite

图片描述

inf

图片描述

  • inf 和 nan 的不同在于
    • inf 是一个超过浮点表示范围的浮点数
    • 其本质仍然是一个数
    • 只是他无穷大
    • 因此无法用浮点数表示(比如 1/0)
    • 而 nan 则一般表示一个非浮点数(比如无理数)

图片描述

  • 在数学上
    • inf==inf
    • inf == inf + X(X 为任意浮点数)
    • 而 nan != nan
  • 如此说来
    • 如何判断一个数是否是 nan 呢?

判断浮点数是否是nan

  • python 中
    • 判断一个数 是否是 nan
    • 可以直接判断 他是否与自身 相等

图片描述

  • 如果就想要 直接判断呢?

搜索

import math
x = float("nan")
math.isnan(x)
  • 使用数学模块

图片描述

  • math 包中的 isnan 函数
    • is 的意思是进行判断
    • nan 的意思是 不是一个数字(Not a Number)
    • 合在一起 就是判断 这个参数是不是一个数字
  • 判断 是否不是数(nan) 可以用 isnan
  • 想要判断变量是否是无穷大
    • 又该如何呢?

inf

  • 这也由是 754中 对于inf的定义决定的
  • 你说这东西分这么细不是分别心么?

图片描述

  • 是的
    • 就是分别心
    • 就是不断把刀磨得锐利明确的过程
  • 编程其实是 一个抽象的艺术
    • 有了抽象之后 就会有量化
    • 有了量化 自然要进行比较
    • 编程中到处 都是比较

zen

按你要求:23行一一对应,左边纯英文,句尾用 <br>,表格紧凑瘦版:

EN 中文
Beautiful is better than ugly.
优美比丑陋好
Explicit is better than implicit.
清晰比晦涩好
Simple is better than complex.
简单比复杂好
Complex is better than complicated.
复杂比错综复杂好
Flat is better than nested.
扁平比嵌套好
Sparse is better than dense.
稀疏比密集好
Readability counts.
可读性很重要
Special cases aren't special enough to break the rules.
特殊情况也不应该违反这些规则
Although practicality beats purity.
但现实往往并不那么完美
Errors should never pass silently.
异常不应该被静默处理
Unless explicitly silenced.
除非你希望如此
In the face of ambiguity, refuse the temptation to guess.
遇到模棱两可的地方,不要胡乱猜测
There should be one-- and preferably only one --obvious way to do it.
应有一种——且最好只有一种——显而易见的方法
Although that way may not be obvious at first unless you're Dutch.
虽然这种方案起初并不明显,除非你是荷兰人
Now is better than never.
现在开始做比不做好
Although never is often better than right now.
但不做通常比立刻动手要好
If the implementation is hard to explain, it's a bad idea.
如果实现难以解释,那就是个坏主意
If the implementation is easy to explain, it may be a good idea.
如果实现易于解释,那或许是个好主意
Namespaces are one honking great idea -- let's do more of those!
命名空间是个超棒的主意,我们应该多用

图片描述

分析原因

  • 分析下面的不等式结果成因

图片描述

  • 这些不符合我们直觉结果的原因
    • 是由于ieee754规则和相关运算规则确定的
    • 数字从此定了边界
    • 被define了
  • 探测和验证代码在处理极端的或偏门的情况时会发生什么
    • 这门学问叫做边界测试

总结

  • 这次研究了
    • 大于
    • 小于
    • 等于
    • 不等于
  • 数字各个类型之间可以比较
  • 但是要注意有的是 decimal 和 float 之间有的精确度的差别
  • nan 一切比较结果都为 False
  • inf 可以参与比较
  • 数字和字符串之间可以比较么?
  • 字符串之间可以比较么?🤔
  • 下次再说 👋

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