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
#所有数据类型都自带布尔值
1None0,空(空字符串,空列表,空字典等)三种情况下布尔值为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) 将一个整数转换为一个八进制字符串

results matching ""

    No results matching ""