Python数据类型
1 什么是数据类型
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型
- 整型 int
- 浮点 float
- 复数 complex
- 字符串 str
- 布尔 bool
- 空值 None
- 列表 list
- 元祖 tuple
- 字典 dict
- 集合 set
使用 type() 可以查看变量和数据的类型
2 数据类型详解
2.1 整型 (int)
作用:年纪,等级,身份证号,qq号等整型数字相关 定义:
age=10 #本质age=int(10)
二进制、八进制、十六进制表示
num = 0x45 # 十六进制
num = 0o45 # 八进制
num = 0b10 # 二进制
# 不论用何种进制形式定义的 数字,输出的时候都会显示 十进制
2.2 浮点(Float)
作用:薪资,身高,体重,体质参数等浮点数相关
定义:
salary = 3000.3 #本质salary=float(3000.3)
salary = .2 # 等同于 0.2
科学计数法表示
salary=1.2e12
浮点数的精度问题:
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
2.3 复数(complex)
#了解
d=1+1j
print('D的类型为:',type(D))
print(d.read)
print(d.imag)
2.4 字符串
作用:名字,性别,国籍,地址等描述信息
定义:在单引号\双引号\三引号内,由一串字符组成
#单双引号木有任何区别 但是双引号内不能嵌套双引号 单引号内不能嵌套单引号
name = 'Json Wang'
name = "Jack Li"
#多引号什么作用呢?作用就是多行字符串必须用多引号 #三个单引号 三个双引号 都可以
msg = '''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
字符串拼接符: +
*
name = 'xiaoli'
age = '14'
print(name + age) #字符串拼接,要求连个操作数都必须是 字符串
#注意1:字符串相加的效率不高
#字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字#符串1与字符串3的空间被复制了一次,
print(name*5) #name会连续出现5次
取字符串中的某个字符
name = 'Json Wang'
print(name[1])
2.5 布尔值 bool
布尔值,一个True一个False 计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识
a=3
b=5
a > b #不成立就是False,即假
a < b #成立就是True, 即真 True
#所有数据类型都自带布尔值
1、None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
2、其余均为真
2.6 空值 None
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。
2.7 列表(List)
作用:存储多个值的情况,比如一个人有多个爱好
定义
#在[]内用逗号分隔,可以存放n个任意类型的值
定义:students=['lili','yanyan','meimei',] #students=list(['egon','alex','wupeiqi',])
#列表取值
studengs[1] = 'xiaolili'
#存放多个学生的信息:姓名,年龄,爱好
students_info=[['egon',18,['play',]],['alex',18,['play','sleep']]]
students_info[0][2][0] #取出第一个学生的第一个爱好
列表的每个成员可以是任意类型的数据
3.6 字典(Dict)
作用:存多个值,key-value存取,取值速度快
定义:
#定义:key必须是不可变类型,value可以是任意类型
info={'name':'egon','age':18,'sex':'male'} #本质info=dict({....})
或
info=dict(name='egon',age=18,sex='male')
或
info=dict([['name','egon'],('age',18)])
3.7 元祖(Tuple)
作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
定义:与列表类型比,只不过[]换成()
age=(11,22,33,44,55) #本质age=tuple((11,22,33,44,55))
3.9 集合(Set)
作用:去重,关系运算,
定义:
my_set = {'wupeiqi','oldboy','gangdan'} # my_set=set(['wupeiqi','oldboy','gangdan'])
集合:可以包含多个元素,用逗号分割, 集合的元素遵循三个原则: 1:每个元素必须是不可变类型(可hash,可作为字典的key) 2: 没有重复的元素 3:无序
注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
# 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
# 求出即报名python又报名linux课程的学员名字集合
print(pythons & linuxs)
# 求出所有报名的学生名字集合
print(pythons | linuxs)
# 求出只报名python课程的学员名字
print(pythons - linuxs)
# 求出没有同时这两门课程的学员名字集合
print(pythons ^ linuxs)
3.9 不可变集合(Frozenset)
a=frozenset([1,2,3,(1,2,4)])
元素也只能是可hash的,可以用来做字典的键
与tuple的区别在于无序,元素不可重复,且元素只能是不可变类型
3 可变类型和不可变类型
3.1 Python对象三要素:id type 和 value
- python中一切皆是对象: 不论是是变量还是字面量(直接量)
- Id:唯一标识一个对象 id()函数可以查看对象的标识
- Type:标识对象的类型 type()函数可以查看 对象的标识
- Value:对象的值
#1 等号比较的是value,
#2 is比较的是id
#1. id相同,意味着type和value必定相同
#2. value相同type肯定相同,但id可能不同
3.2 可变类型
在id不变的情况下,value可以变,则称为可变类型,如列表,字典,集合
3.3 不可变类型
value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间) 如: 数字、字符串、元祖、布尔
4 数据类型的分类
4.1 按存值个数区分
标量/原子类型 | 数字,字符串 |
---|---|
容器类型 | 列表,元组,字典,集合 |
4.2 按可变不可变区分
可变 | 列表,字典, 集合 |
---|---|
不可变 | 数字,字符串,元组 等 |
4.3 按访问顺序区分
直接访问 | 数字,bool/None |
---|---|
顺序访问(序列类型) | 字符串,列表,元组,集合(不能被索引,无序) |
key值访问(映射类型) | 字典 |
5 数据类型转换
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
函数 | 描述 |
---|---|
int(x [,base]) | 将x转换为一个整数 |
float(x) | 将x转换到一个浮点数 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个序列 (key,value)元组。 |
frozenset(s) | 转换为不可变集合 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |