本文详细的讲解了 Python 基础 ( 数字类型 ). 介绍了有关 Python 支持三种不同的数字类型. 以及在实际操作中会遇到的问题, 提供了解决方案.
Hey, 大家好呀, 我是 Go 进阶者.
一, 数字类型
数字类型用于存储数学意义上的数值.
数字类型是不可变类型. 所谓的不可变类型, 指的是类型的值一旦有不同了, 那么它就是一个全新的对象. 数字 1 和 2 分别代表两个不同的对象, 对变量重新赋值一个数字类型, 会新建一个数字对象.
Python 的变量和数据类型的关系.
变量只是对某个对象的引用或者说代号, 名字, 调用等等, 变量本身没有数据类型的概念. 类似 1,[2, 3, 4],"haha" 这一类对象才具有数据类型的概念.
例如:
- a = 1 # 创建数字对象 1.
- a = 2 # 创建数字对象 2, 并将 2 赋值给变量 a,a 不再指向数字对象 1
这里, 发生了变化的是变量 a 的指向, 而不是数字对象 1 变成了数字对象 2. 初学者可能会比较迷糊, 但不要紧, 我们努力去明白它.
二, Python 支持三种不同的数字类型(整数, 浮点数和复数)
1. 整数(Int)
通常被称为整型, 是正或负整数, 不带小数点. Python3 的整型可以当作 Long 类型 (更长的整型) 使用, 所以 Python3 没有 Python2 的 Long 类型.
例如: 1,100,-8080,0, 等等.
表示数字的时候, 有时我们还会用八进制或十六进制来表示:
十六进制用 0x 前缀和 0-9,a-f 表示, 例如: 0xff00,0xa5b4c3d2.
八进制用 0o 前缀和 0-7 表示, 例如 0o12.
Python 的整数长度为 32 位, 并且通常是连续分配内存空间的.
什么是空间地址?
空间地址 (address space) 表示任何一个计算机实体所占用的内存大小. 比如外设, 文件, 服务器或者一个网络计算机. 地址空间包括物理空间以及虚拟空间.
例 :
- print(id(-2))
- print(id(-1))
- print(id(0))
- print(id(1))
- print(id(2)
从上面的空间地址看, 地址之间正好差 32. 为什么会这样?
因为 Python 在初始化环境的时候就在内存里自动划分了一块空间, 专门用于整数对象的存取. 当然, 这块空间也不是无限大小的, 能保存的整数是有限的, 所以你会看到 id(0)和 id(10000)之间的地址差别很大.
- >>> id(0)
- 1456976928
- >>> id(10000)
- 45818192
小整数对象池:
Python 初始化的时候会自动建立一个小整数对象池, 方便我们调用, 避免后期重复生成!
这是一个包含 262 个指向整数对象的指针数组, 范围是 - 5 到 256. 也就是说比如整数 10, 即使我们在程序里没有创建它, 其实在 Python 后台已经悄悄为我们创建了.
验证一下小整数对象池的存在
在程序运行时, 包括 Python 后台自己的运行环境中, 会频繁使用这一范围内的整数, 如果每需要一个, 你就创建一个, 那么无疑会增加很多开销. 创建一个一直存在, 永不销毁, 随用随拿的小整数对象池, 无疑是个比较实惠的做法.
- print(id(-6))
- print(id(-5))
- print(id(-4))
- print(id(255))
- print(id(256))
- print(id(257))
从 id(-6)和 id(257)的地址, 我们能看出小整数对象池的范围, 正好是 - 5 到 256.
除了小整数对象池, Python 还有整数缓冲区的概念, 也就是刚被删除的整数, 不会被真正立刻删除回收, 而是在后台缓冲一段时间, 等待下一次的可能调用.
- >>> a = 1000000
- >>> id(a)
- 45818160
- >>> del a # 删除变量 a
- >>> b = 1000000
- >>> id(b)
- 45818160
给变量 a 赋值了整数 1000000, 看了一下它的内存地址. 然后我把 a 删了, 又创建个新变量 b, 依然赋值为 1000000, 再次看下 b 的内存地址, 和以前 a 存在的是一样的.
del 是 Python 的删除关键字, 可以删除变量, 函数, 类等等.
这一段内容, 可能感觉没什么大用, 但它对于理解 Python 的运行机制有很大帮助.
2. 浮点数(float)
浮点数也就是小数, 如 1.23,3.14,-9.01, 等等. 但是对于很大或很小的浮点数, 一般用科学计数法表示, 把 10 用 e 替代, 1.23x10^9 就是 1.23e9, 或者 12.3e8,0.000012 可以写成 1.2e-5, 等等.
3. 复数( (complex))
复数由实数部分和虚数部分构成, 可以用 a + bj, 或者 complex(a,b)表示, 复数的实部 a 和虚部 b 都是浮点型. 关于复数, 不做科学计算或其它特殊需要, 通常很难遇到.
数字类型转换:
有时候, 我们需要对数字的类型进行转换. Python 为我们提供了方便的内置的数据类型转换函数.
int(x): 将 x 转换为一个整数. 如果 x 是个浮点数, 则截取小数部分.
float(x) : 将 x 转换到一个浮点数.
complex(x) : 将 x 转换到一个复数, 实数部分为 x, 虚数部分为 0.
complex(x, y): 将 x 和 y 转换到一个复数, 实数部分为 x, 虚数部分为 y.
转换过程中如果出现无法转换的对象, 则会抛出异常, 比如 int("haha"), 你说我把字符串 "haha" 转换为哪个整数才对?
- a = 10.53
- b = 23
- print(int(a))
- print(float(a))
- print(complex(a))
- print(complex(a, b))
三, math 库(数学计算)
科学计算需要导入 math 这个库, 它包含了绝大多数我们可能需要的科学计算函数, 一般常用的函数主要包括 abs(),exp(),fabs(),max(),min()等, 这里就不再赘述了, 感兴趣的小伙伴可以自行百度下.
下面是两个常用数学常量:
下面是一些应用展示, 注意最后的角度调用方式:
- import math
- print(math.log(2))
- print(math.cos(30))
- print(math.cos(60))
- print(math.sin(30))
- print(math.sin(math.degrees(30)))
- print(math.sin(math.radians(30)))
四, 总结
本文详细的讲解了 Python 基础 ( 数字类型 ). 介绍了有关 Python 支持三种不同的数字类型. 以及在实际操作中会遇到的问题, 提供了解决方案.
用丰富的案例帮助大家更好理解, 使用 Python 编程语言, 方便大家更好理解, 希望对大家的学习有帮助.
来源: http://developer.51cto.com/art/202111/691930.htm