Python标准数据类型
- Numbers(数字) √
- Boolean(布尔) √
- String(字符串)
- List(列表)
- Tuple(元组)
- Dictionary(字典)
Python 数字类型
数字数据类型用于存储数值。
他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。
当你指定一个值时,Number 对象就会被创建:
var1 = 1
var2 = 10
您也可以使用del语句删除一些对象的引用。
del语句的语法是:
del var1[,var2[,var3[....,varN]]]
您可以通过使用del语句删除单个或多个对象的引用。例如:
del var
del var_a, var_b
Python支持的数字类型
- int(有符号整型)
- float(浮点型)
- complex(复数)
数字类型 | 示例 | 占用内存空间大小 | 范围 |
int | 1, -3, -2945, 123, 0x69, 1073741823 | 28 | -2**30+1~2**30-1 (0为24) |
float | 3.14, -0.23, 2e10, -70.2E-12 | 24 | 所有 |
complex | 3.14j, -.6545+0J, 3e+26J | 32 | 所有 |
查看对象的类型和占用内存空间的方法
import sys
print(type(12)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type(1+2j)) # <class 'complex'>
print(sys.getsizeof(0)) # 24
print(sys.getsizeof(24)) # 28
print(sys.getsizeof(3.14) # 24
print(sys.getsizeof(3+4j)) # 32
int类型
# float转int
# 1.向下取整
int(3.14) # 3
int(9.99) # 9
# 2.四舍五入
round(3.14) # 3
round(9.99) # 10
# 3.向上取整
import math
math.ceil(3.14) # 4
math.ceil(9.99) # 10
# 二进制、八进制、十进制、十六进制转换
# 1.十进制转二进制
bin(12) # '0b1100', '0b'开头
# 2.十进制转八进制
oct(8) # '0o10', '0o'开头
# 3.十进制转十六进制
hex(16) # '0x10', '0x'开头
# 4.其他进制转十进制
int('0b101', 2) # 5, 二进制
int('0o7654321', 8) # 2054353, 八进制
int('0x2521', 16) # 9505, 十六进制
# 5.其他进制互转: 先转成十进制,再转成对应进制
bin(int('0x252a4', 16)) # '0b100101001010100100', 十六->十->二
oct(int('0b10001110111', 2)) # '0o2167', 二->十->八
# python固定在内存的int数据
x = 0
for y in range(10000):
x = int(str(y))
if id(x) != id(y):
break
print(x) # 257, 也就是说0~256这些int数据是固定在内存的,当变量解绑后,也不会从内存空间释放
float类型
# int转float
float(3) # 3.0
# 小数位设置
round(3.1415926, 1) # 3.1, 四舍五入保留1位小数
round(3.1415926, 3) # 3.142, 四舍五入保留3位小数
# 浮点数损失精度问题
0.1 + 0.2 # 按理结果应该是0.3,但实际返回0.30000000000000004
"""
为什么有极小的误差?
因为 Python 中使用双精度浮点数来存储小数。
在 Python 使用的 IEEE 754 标准(52M/11E/1S)中,8字节64位存储空间分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号,即这是一种二进制版的科学计数法格式。
虽然52位有效数字看起来很多,但麻烦之处在于,二进制小数在表示有理数时极易遇到无限循环的问题。
其中很多在十进制小数中是有限的,比如十进制的 1/10,在十进制中可以简单写为 0.1 ,但在二进制中,他得写成:0.0001100110011001100110011001100110011001100110011001…..(后面全是 1001 循环)。
因为浮点数只有52位有效数字,从第53位开始,就舍入了。这样就造成了标题里提到的”浮点数精度损失“问题。
舍入(round)的规则为“0 舍 1 入”,所以有时候会稍大一点有时候会稍小一点。
"""
# 为了解决这个位,Python提供了另一种数字类型——Decimal
from decimal import Decimal
Decimal("0.1") + Decimal("0.2") # Decimal('0.3')
# 注意Decimal内传字符串,如果传float仍会有这个问题
Decimal(0.1) + Decimal(0.3) # Decimal('0.3999999999999999944488848769')
complex类型
# 获取实部虚部
x = 2.5+3.6j
x.real # 2.5, 实部
x.imag # 3.6, 虚部
# 共轭复数
x.conjugate() # (2.5-3.6j)
Python布尔类型
布尔型代表真假值,通常用在条件判断和循环语句中。
Python 定义了 bool 类型以及两个常量 True 和 Flase 代表真假。
# int转bool, 除了0为False,其余都是True
bool(0) # Flase
bool(12) # True
bool(-345) # True
# float转bool, 同理
bool(0.0) # Flase
bool(3.14) # True
bool(-23.455) # True
# complex转bool, 同理
bool(0.0+0j) # Flase
bool(3.14+1.2j) # True
bool(-23.455-2j) # True
# 所有对象都能转bool,包括bool类型
bool(True) # True
bool(Flase) # False
# 从上面可以看出,表示0的其布尔值基本都是False
# 表示假(错)的其布尔值基本都是False
# 表示空(None,空字符串,空列表,空元组,空字典)的其布尔值基本都是False