show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次了解科学计数法
- 科学计数法分成有效数字和指数两块
- 找到了双精度 double 型中绝对值最小和最大的数
- 最后发现 int 型在大数方面超过了双精度?
- 这可能吗?🤪
- 看起来是可以进行乘法运算的
- 可是计算机里面最大的整型数字不就是无符号的 long 型么?
- q 是 8 字节 有符号整型
- Q 是 8 字节 无符号整型
- 系统加法默认的是哪种数据类型呢?
- 找到最大值
- 无符号
- 全1最大
- 有符号
- 符号位为0
- 其余全1最大
- 无符号
- 系统所用的最大的整数是 9223372036854775807
- 也就是说
- 系统关于整数的默认数据类型是
- 8 字节有符号整数
- 在最大的数值上再加上一根稻草
- 骆驼并没有压倒?!
- 可是他确实无法落实到 8 字节的有符号整型数据类型上
- 甚至超过了 8 字节无符号整型的最大值
- 怎么解释?!!
- 8 个字节能装进去最大的东西
- 如果再加 1
- 肯定 8 个字节放不下
- 但是 9 个字节能放下
- 是不是 python 进行了什么样的处理
- 既然他能放进去
- 肯定做了相应的处理
- 难道他自己定义了数据类型?
- 首先明确运算
- 加运算
- 同样是加法运算符
- 不同的数据类型有不同的运算方法
- 字符串
- 拼接
- 浮点型
- 数据是双精度类型
- 直接用 cpu 的浮点运算指令进行加法
- 整型
- 数据可能超过 8 个字节
- 运算的方法是 python 自己定制的
- 结果也是 python 自己定制的
- 字符串
- 观察被加数和加数范围
- 如果 8 个字节都放得下
- 就放进去直接加
- 如果 8 个字节放不下
- 就扩展 1个字节
- 使用 9个字节 存储
- 如果还不够就再扩展直到满足
- 同样位置的 8 字节相加
- 并直接进位
- 得到的 8、10、12...字节就是我们需要的结果
- 关于大数计算
- ABC 语言 也就是 python 之前 Guido 参与的语言就支持
- 不用引入任何大数计算的包
- 可以进行很大整数的精确计算
- 这一点是从根上来的
- 因为 Guido 当时所在的 cwi
- 是数学与计算中心
- 天生就是要和数学家科学家打交道的
- 这也是为什么 python 后来在数学科学领域很厉害的原因
- python 为什么要帮我们搞特别大的整数运算呢?
- 因为 python 想要让用户用的很方便
- python3 统一使用了长整型 适合大数据运算 不会溢出
- 不用分短整型,整型,长整型...
- python 就降低其他行业的学习门槛了。
- 直接加就完事了
- 复杂的工作都交给 python
- 绝对精确而且不会溢出
- 这确实对于初学者很友好
- 用抽象的方式得到了好的结果
- 还屏蔽了具体实现的细节
- 还记得 guido 最开始在哪里工作吗?
- 荷兰的数学与计算机研究中心
- 一切都不是偶然
- 不过,数字太长了
- 不容易看出来多少位
- 有什么办法吗?
- 分割位 可以使用
_
来表示- 而且 不会影响整型数字的数值
-
12_345
就是$1234$
- 为什么要在千位前面加下划线
- 而不是在其他地方加下划线呢?
- 12_345 英文读作
- twelve thousand, three hundred and forty-five
- 12个千 然后是 三百四十五
- 在往上是
- million
- billion
- 都卡在 103 这个位置上
- 转来转去都很方便
- 外国在千分位放分隔符
- 而且一般用的是逗号
- 可以把下划线改成逗号么
- 加了逗号的数字
- 是没法直接用int函数转化回来的
- 可以通过字符替换函数 replace() 替换
- 把
","逗号
替换为"" 啥也没有
- 把
- 我们中文 一般管12,3456 叫 十二万三千四百五十六
- 用的是万分位
- 可以将数字 转化为 万分位 么?
- 引入 re 模块
- re 是正则表达式模块
re.sub(r"(?<=\d)(?=(?:\d\d\d\d)+$)",",","12345")
- 引入之后可以得到我们想要的字符串
- str 可以把整型、浮点型数字转化为字符串
- int 可以把字符串转化为整型数字
- float 可以把字符串转化为 float
- 可是
- 如果我不知道这个字符串是整型还是浮点型怎么办?
- 可以用eval函数转化回来吗?
- eval 就是
- evaluation 衡量计算
- eval 和 str 是逆运算
- str 把任意类型转为字符串
- eval 把字符串转为相应类型的数字
- eval 是什么意思呢?
- 这个 eval 来自于 evaluate
- 衡量计算
- 可以用这个eval
- 将"1,234"转化为整数吗?
- 直接转化失败
- 还是得绕个路
- 不但可以衡量具体的值
- 还可以计算一个表达式
- 这次深入了整型的细节
- python 把复杂的逻辑都留给自己
- 对我们提供一个近乎无限大的整型变量
- 可以做绝对精确的计算
- 还不会溢出
- 很厉害
- python 还可以用千分位符分割整数和小数
- 这有利于观察很大的数字
- 这些很大的数字都怎么来的?
- 加法和乘法都比较慢
- 有乘方运算吗??🤪
- 下次再说 👋