一.目录
1.数据类型
关于数据类型,目前常用的就以下四种:
类型 | 描述 |
---|---|
整型 int | 整数:比如1,-1,200,300 |
浮点数 float | 小数:比如1.1 -4.5 900.2 等 |
字符串(string) | 字符串就是字符组成的一串内容,Python中用成对的单引号或双引号括起来,比如"李小龙是一代武将" ‘hello-’ |
布尔值 bool | 布尔值就是我们常说的逻辑,可以理解为对(True)或错(False) |
在前面已经讲过,在Python中的变量在使用前都必须赋值,变量赋值以后该变量才会被创建,这里说的“类型”就是变量所指的内存数据的类型。
1.a,b是变量,它们是没有类型的
2.a,b变量指向/代表的数据“hello”,100是有类型的。
如下图所示
二.type()函数-查看数据类型
1.通过type()函数,来查看数据的类型
语法:type(object)
object就是要查看类型的数据,可以是一个具体的数据(即:字面量),也可以是变量(也就是查看该变量指向的数据的类型)
具体代码实现如下:
#演示type()使用
name = "Tom" #字符串
age = 20 #整形
score = 90.4 #浮点数(小数)
gender = "男" #字符串
is_pass = True #bool类型
#查看的变量的类型(本质是查看变量指向的数据类型)
print(type(name))
print(type(age))
print(type(score))
print(type(gender))
print(type(is_pass))
整数类型:
整形介绍
python整形就是用于存放整数值的,比如12,30,3456,-1等。
代码实现如下:
n1 = 45
n2 = 88
print("n1 =",n1)
print("n2 =",n2)
1.整型的使用细节
python的整数有十进制,十六进制,八进制,二进制
1.十进制就是最常见的写法,比如1,66,123等
2.十六进制写法:加前缀0×,由0-9和A-F的数字和字母组合
3.八进制写法:加前缀0o,由0-7数字组合
4.二进制写法:加前缀0b,只有0和1数字组合
5.运行时,会自动转换为十进制输出
代码实现如下:
print(10) #十进制
print(0X10) #十六进制
print(0O10) #八进制
print(0b10) #二进制
#运行如下
10
16
8
2
Python中的整型中关于字节和位的说明:
字节(byte):计算机中基本存储单元
位(bit):计算机中的最小存储单位
1byte = 8bit规律:1.字节数随着数字增大而增大(即:python整型是变长的)
2.每次的增量是4个字节
整型的使用,代码实现如下:
#字节数随着数字增大而增大
import sys # 导入 sys 模块
n1 = 0
n2 = 1
n3 = 2
n4 = 2 ** 15
n5 = 2 ** 30
n6 = 2 ** 128
#在python中,可以通过sys.getsizeof返回对象(数据)的大小(按照字节单位返回)
print(n1,sys.getsizeof(n1),"类型",type(n1))
print(n1,sys.getsizeof(n2),"类型",type(n2))
print(n1,sys.getsizeof(n3),"类型",type(n3))
print(n1,sys.getsizeof(n4),"类型",type(n4))
print(n1,sys.getsizeof(n5),"类型",type(n5))
print(n1,sys.getsizeof(n6),"类型",type(n6))
print(sys.getsizeof(10)) #28字节
代码运行如下:
0 24 类型 <class 'int'>
0 28 类型 <class 'int'>
0 28 类型 <class 'int'>
0 28 类型 <class 'int'>
0 32 类型 <class 'int'>
0 44 类型 <class 'int'>
28
Python 中的 sys 模块是一个内置模块,提供了与 Python 解释器和系统交互的功能,但需要显式导入后才能使用
2.浮点类型
在Python中,浮点类型可以表示一个数,例如,124.8 , 9.7 , -0.34等,浮点数也有其表现形式和大小限制,其中表现形式有两种:
1.十进制数形式,如:5.12 .512;
2.科学计数法形式, 如:5.12e2, 5.12E-2
浮点数的大小限制
max=1.7976931348623157e+308
min= 2.2250738585072014e-308
浮点数表现形式代码表现如下:
#浮点类型
n1 = 4.8
n2 = -6.9
n3 = .876
print("n1 =",n1)
print("n2 =",n2)
print("n3 =",n3)
运行结果如下:
n1 = 4.8
n2 = -6.9
n3 = 0.876
科学计数法形式代码如下:
#浮点数科学计数法表现形式:
n6 = 5.12e2 #5.12乘以10的2次方 512.0
n7 = 5.12E-2 #5.12除以10的2次方 0.0512
print("n6 =",n6)
print("n7 =",n7)
浮点类型在计算时,会存在精度损失,在Python中,精度损失问题通常出现在浮点数运算中。由于计算机使用二进制浮点数表示法(如IEEE 754标准),某些十进制小数无法精确表示为二进制浮点数,从而导致精度损失.
浮点数处理精度损失问题,代码如下:
#处理精度损失问题,必须导入Decimal类
from decimal import Decimal
#b = 8.1 / 3 #2.6999999999999997
b = Decimal("8.1") / Decimal("3") #2.7
print("b =",b)
运行结果如下:
b = 2.7
如上代码中这里,8.1 和 3 都是浮点数。由于 8.1 无法精确表示为二进制浮点数,因此在计算 8.1 / 3 时,结果会包含一个微小的误差,导致结果为 2.6999999999999997 而不是预期的 2.7。处理精度损失问题,这里必须导入Decimal类。
3.布尔类型 bool
具体什么是布尔类型:
1.布尔类型也叫bool类型,取值True和False
2.True和False都是关键字,表示布尔值。
3.bool类型适用于逻辑运算,一般用于程序流程控制,比如条件控制语句; 循环控制语句
代码实现如下:
#bool类型的使用规则
num1 = 200
num2 = 400
if num1 < num2:
print("num1 < num2")
运行结果如下
num1 < num2
#把num1 > num2的结果赋给result变量
result = num1 > num2
print("result =",result)
运行结果如下:
result = False
由以上两串代码可知,第一个bool类型使用的是条件语句,第二个是逻辑判断场景。
bool类型使用规则:
1.python不支持单字符类型,单字符在Python中也是作为一个字符串使用;
2.用三个单引号’‘‘内容’’',或者三个双引号“““内容”””可以使字符串内容保持原样输出,在输出格式复杂的内容是比较有用的。
3.在字符串前面加’r’可以使整个字符串不会被转义。
代码实现如下:
#单字符作为字符串使用
str3 = 'B'
print("str3类型",type(str3))
运行结果:
str3类型 <class 'str'>
字符串驻留机制
这里的驻留机制就是说,Python仅保存一份相同且不可变字符串,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。
str1 = "YES"
str2 = "YES"
str3 = "YES"
print("str1的地址:",id(str1))
print("str2的地址:",id(str2))
print("str3的地址:",id(str3))
运行结果如下:
str1的地址: 2041787119152
str2的地址: 2041787119152
str3的地址: 2041787119152
那么现在验证驻留行为是否是正确的,代码实现如下:
str1 = "YES"
str2 = "YES"
print(id(str1) == id(str2))
运行结果如下:
True
由此可见,这个驻留机制是正确的,为真值
对于长字符串而言,是否能够驻留呢,那么来看下面的代码:
str1 = "这是一个较长的字符串,不会被驻留"
str2 = "这是一个较长的字符串,不会被驻留"
print(id(str1) == id(str2))
运行结果如下:
True
在这里,这是个长字符串,它是不会被驻留的,这就是个假值。
所以对于驻留机制而言总结如下:
- 字符串驻留:Python 会对一些短小的、不可变的字符串进行驻留优化,多个变量引用同一个字符串对象。
2.id() 函数:用于获取对象的内存地址,可以验证变量是否引用同一个对象。
驻留规则:短小的、直接定义的字符串通常会被驻留,而动态生成的字符串或较长的字符串可能不会被驻留。
驻留机制的优点就是当需要相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存。