1.3 数据类型
标准数据类型
Python3 中有六个标准的数据类型:
Number(数字)
- int
- bool
- float
- complex(复数)
- String(字符串)
- List(列表)
- Tuple(元组)
- Sets(集合)
- Dictionary(字典)
Python3 的六个标准数据类型中:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
可变类型定义
:变量值改变但是变量地址不会改变
不可变类型定义
:变量值改变,变量地址必须改变
# 可变类型
list1 = [1, 2, 3, 4, 5]
print(id(list1)) #list1的内存地址
list2 = list1
print(id(list2)) #list2的内存地址
list1.remove(1)
print(id(list1), id(list2)) #修改值后的list1,list2的内存地址
print(list2)
# 不可变类型
str1 = "点赞哦"
str2 = str1
print(id(str1), id(str2))
str1 = "这次一定"
print(id(str1), id(str2))
print(str1, str2)
类型检查
如何知道一个变量的类型呢?
- 内置的 type() 函数可以用来查询变量所指的对象类型。(Python是面向对象的语言)
- 此外还可以用 isinstance 来判断
# 使用type()获取类型
a, b, c, d = 20, 5.5, True, 4+3j
e = "Demo"
print(type(a), type(b), type(c), type(d), type(e))
# 输出
# <class 'int'> <class 'float'> <class 'bool'> <class 'complex'> <class 'str'>
# isinstance()判断类型
a = 111
print(isinstance(a, int))
# 输出
# True
isinstance 和 type 的区别
- type()不会认为子类是一种父类类型。
- isinstance()会认为子类是一种父类类型。
class A:
pass
class B(A):
pass
ans_1 = isinstance(A(), A) # returns True
ans_2 = type(A()) == A # returns True
ans_3 = isinstance(B(), A) # returns True
ans_4 = type(B()) == A # returns False
print(ans_1, ans_2, ans_3, ans_4)
# 输出
# True True True False
Python数据类型转换
- 有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。
- 以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值
函数 | 描述 |
---|---|
int(x [,base]) | 将x转换为一个整数 |
float(x) | 将x转换到一个浮点数 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个序列 (key,value)元组。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
unichr(x) | 将一个整数转换为Unicode字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
数据类型转换分类
- 数据类型转换一共分为2类:自动数据类型转换(隐式转换)和强制数据类型转换(显示转换)
自动数据类型转换/隐式转换
自动类型转换是程序根据运算要求进行的转换,不需要人工干预
- 1.自动类型转换不需要人工干预
- 2.自动类型转换多发生在运算或者判断过程中
- 3.转化时向着更加精确的类型转换
a = 1.0
b = 1
c = a + b
print(type(a), type(b), type(c)
强制类型转换/显示转换
- 根据程序需要,由编写程序人员人为改变数据类型的方式就是强制数据类型转换。
- int() 将其他类型转化为整型
1.数字整型转化之后,还是原来的味道
2.浮点类型转化之后,舍去小数部分
3.布尔值转化之后 True -> 1 False->0
4.字符串转换,仅纯整型字符串可以转化(浮点型或者带有其他字符都不可以转化)
5.复数不可以转换
- float() 将其他类型转化为浮点型
1.整型转换之后变为浮点型,后面+.0
2.浮点数不需要转化,转化也不会变化
3.布尔值转化 True->1.0 False ->0.0
4.字符串,纯整型字符串和纯浮点型字符串可以转换,其他都不可以
- complex() 将其他数据转化为复数
1.整型转换之后变为 (整型+0j)
2.浮点型转换之后变为(浮点型 + 0j)
3.布尔值转化之后 True->(1+0j) False(0j)
4.字符串,纯整型和浮点型字符串可以转化,其他都不行
5.复数,无需转换
- bool() 将其他类型转化为布尔值
#下面转化为布尔值false的情况
1.整型 0
2.浮点型 0.0
3.复数 0+0j
4.布尔 False
5.字符串 '' 空字符串
6.列表 [] 空列表
7.元组 ()空元组
8.字典 {} 空字典
9.集合 set() 空集合
str() 将其他类型转化为字符串
- 所有转换均改变类型为字符串,表示方式依旧不变
list() 将其他类型转化为列表类型
- 在python中有5中可迭代序列,可以互相转换,他们分别是:
- 字符串,列表,元组,字典,集合
var = ('张三','李四','王老五')
newvar = list(var)
newvar的值为 ['张三','李四','王老五']
注意:
- 1.字符串转换时每个字符变成列表中的一个值
- 2.字典类型转换时,仅将字典的键部分转换成列表,忽略值部分
- tuple() 将其他类型转化为元组类型
var = {'张三','李四','王老五'}
newvar = tuple(var)
newvar的值为 ('张三','李四','王老五')
注意:
- 1.字符串转换时每个字符变成元组中的一个值
- 2.字典类型转换时,仅将字典的键部分转换成元组,忽略值部分
- set() 将其他类型转化为集合类型
var = ['张三','李四','王老五']
newvar = set(var)
newvar的值为 {'张三','李四','王老五'} #值的顺序不定
注意:
- 1.字符串转换时每个字符变成集合中的一个值
- 2.字典类型转换时,仅将字典的键部分转换集合,忽略值部分
- dict() 将其他类型转换为字典类型
- 其他类型转化为字典时需要按照指定的格式才可以转化:(列表和元组的组合可以)
[['cat', '黑猫警长'], ['mouse', '一只耳'], ['next', '请看夏季']]
[('cat', '黑猫警长'), ('mouse', '一只耳'), ('next', '请看夏季')]