🔥Python零基础从入门到精通详细教程6-数据类型的转换- 下篇

98 阅读14分钟

1.简介

上一篇文章,我们讲了Python的基本数据类型,包括:(数值(Numbers)、字符串(String)、列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)。

这么多数据类型,数据类型转换就成了一种常见操作,也就是将一种数据类型转变为另一种。由于Python是一种动态类型语言,可以在程序运行时更改变量的类型。有时,我们可能希望将一个数据类型的变量视为另一种数据类型,例如,将数字作为字符串处理,或将复杂的数据结构如列表或字典用作其他类型的容器。这就是数据类型转换的重要性所在。

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。在Python编程的领域里,数据类型转换是一项极为基础且频繁使用的操作。对各种数据类型间转换方法的熟练掌握,能显著提升代码的灵活性与实用性,使开发者得以更高效地处理多样化的数据需求。接下来,本文将对Python中常见的数据类型转换进行全面且深入的分享和讲解。

2.什么是数据类型转换

数据类型转换(也称为类型强制转换或类型铸造)是指将一种数据类型的对象转换为另一种数据类型的过程。Python 提供了多种内置函数和方法来实现类型转换,以支持灵活的数据操作。类型转换在处理不同类型的数据(如用户输入、文件读取、数据处理等)时非常常见。

3.数据类型转换分类

Python 数据类型转换可以分为两种:

  • 隐式类型转换 - 自动完成
  • 显式类型转换 - 需要使用类型函数来转换

Python中的数据类型转换有两种,一种是自动类型转换,即Python在计算中会自动地将不同类型的数据转换为同类型数据来进行计算;另一种是强制类型转换,即需要我们基于不同的开发需求,强制地将一个数据类型转换为另一个数据类型。

3.1隐式类型转换(自动)

在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。

1.对两种不同类型的数据进行运算,较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失。当两个不同类型的数据进行运算时,结果会像更高精度进行计算,精度等级:布尔<整型<浮点型<算数。

📝示例代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块
'''
在和数字运算时,True转为1,False转为0
'''
a=10
b=True
print(a+b)

💼运行结果:

2.我们再看一个实例,整型数据与字符串类型的数据进行相加。

📝示例代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块
'''
在和数字运算时,True转为1,False转为0
'''
num_int = 123
num_str = "北京-宏哥"
print("num_int 数据类型为:",type(num_int))
print("num_str 数据类型为:",type(num_str))
print(num_int+num_str)

💼运行结果:

从输出中可以看出,整型和字符串类型运算结果会报错,输出 TypeError。 Python 在这种情况下无法使用隐式转换。

但是,Python 为这些类型的情况提供了一种解决方案,称为显式转换。

3.2显式类型转换(强制)

在显式类型转换中,用户将对象的数据类型转换为所需的数据类型。 我们使用 int()、float()、str() 等预定义函数来执行显式类型转换。

3.2.1强制类型转换函数

函数说明
str( )可以把其他类型数据转化为字符串类型
int( )可以把其他类型数据转化为整型
float( )可以把其他类型数据转化为浮点型
bool( )可以把其他类型数据转化为布尔类型
list( )可以把其他类型数据转化为列表类型
tuple( )可以把其他类型数据转化为元组类型
dict( )可以把其他类型数据转化为字典类型
set( )可以把其他类型数据转化为集合类型

3.2.2内置转换函数

函数描述
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)将一个整数转换为一个字符
ord(x)将一个字符转换为它的整数值
hex(x)将一个整数转换为一个十六进制字符串
oct(x)将一个整数转换为一个八进制字符串

3.3其他类型 -> dict

3.3.1list -> dict

  • 嵌套的列表(等长二级列表)转换为字典。
  • 通过zip将2个列表映射为字典。

📝示例代码(等长二级列表):

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块
a=[[1, 2], ['a','b']] # 等长二级列表
print(a,type(a))
res=dict(a)
print(res, type(res))

💼运行结果:

📝示例代码(通过zip将2个列表映射为字典):

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块
tp1=[1,2,3]
tp2=[1,2,3,4]
print(tp1,tp2,type(tp1),type(tp2))
res=dict(zip(tp1,tp2))
print(res, type(res))

💼运行结果:

3.3.2tuple -> dict

  • 嵌套的元组(等长二级元组)转换为字典。
  • 通过zip将2个元组映射为字典。

📝示例代码(等长二级元组):

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块
a=((1, 2), (3, 4), (5, 6)) # 等长二级元组
print(a,type(a))
res=dict(a)
print(res, type(res))

💼运行结果:

📝示例代码(通过zip将2个列表映射为字典):

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块
tp1=(1,2,3)
tp2=(1,2,3,4)
print(tp1,tp2,type(tp1),type(tp2))
res=dict(zip(tp1,tp2))
print(res, type(res))

💼运行结果:

3.4其他类型 -> set

3.4.1str -> set

  • 先将字符切割成元组,然后再去重转换成集合。

📝示例代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块
a="hello"
print(a,type(a))
res=set(a)
print(res,type(res))

💼运行结果:

3.4.2list -> set

  • 先对列表去重,再转换。

📝示例代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块
a=[1,2,3,4,4,4]
print(a,type(a))
res=set(a)
print(res,type(res))

💼运行结果:

3.4.3tuple -> set

  • 先对列表去重,再转换。

📝示例代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块
a=(1,2,3,3,3,4,4)
print(a,type(a))
res=set(a)
print(res,type(res))

💼运行结果:

3.4.4dict -> set

  • 会取字典的键名组合成集合。

📝示例代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程3-数据类型
'''

# 3.导入模块
a={'name': 'Alice', 'Age': 5, 'Sex': 'Female'}
print(a,type(a))
res=set(a)
print(res,type(res))

💼运行结果:

4.扩展(类型转换练习)

✅需求: 收银员输入 苹果的价格,单位:元/斤 收银员输入 用户购买苹果的重量,单位:斤 计算并且 输出 付款金额

python实现的程序代码如下:

📝示例代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-23
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: PPython零基础从入门到精通详细教程6-数据类型的转换- 下篇 
'''

# 3.导入模块

# input输人的任何内容都会被当做字符串 回结果为字符串 str 类型
price = float(input("请输入苹果的价格:"))
weight = float(input("请输入重量:"))
money = price * weight
print(money)

💼运行结果:

这里就有一个坑,如果不注意类型转换的话就会报错,原因是:input输人的任何内容都会被当做字符串 回结果为字符串 str 类型 ,如果没有注意到,尤其是面试笔试的时候,没有电脑运行验证代码就会掉坑里,如下图所示:

5.小结

5.1总结(其他类型->dict)

  • 数字类型、字符串、集合不能转换为字典。
  • 列表、元组类型转字典类型,列表必须为等长二级容器,子容器的元素个数必须为2

5.2总结(其他类型->set)

  • 数字类型不转换为集合。
  • 字符串、列表、元组转集合时,结果是无序的。
  • 字典转集合时,只保留字典中的键,结果是无序的。

5.3拓展

1.数据类型的高低之分:

"较高数据类型"和"较低数据类型"是在隐式类型转换中用于描述数据精度的概念。精度可以理解为数据类型能够表示的信息量或详细程度。在Python中,数据类型的"高"和"低"主要根据它们的精度来判断。

这里的"较高"数据类型指的是能够表示更多信息(或更精确信息)的数据类型,而"较低"的数据类型则表示的信息较少。具体来说,比如浮点数就比整数"高",因为浮点数不仅可以表示整数,还可以表示小数。所以在你的例子中,整数就会被自动转换为浮点数,以保证信息不丢失。

再比如,复数(complex)就比浮点数(float)和整数(int)"高",因为复数可以表示实数和虚数,而浮点数和整数只能表示实数。所以在进行运算时,如果操作数包含复数,那么其他的浮点数或整数就会被转换为复数。

通常情况下,Python的数据类型的"高低"可以按照如下顺序理解:布尔(bool)< 整型(int) < 浮点型(float)< 复数(complex)。这个顺序主要根据数据类型可以表示的信息范围和精度来确定的。

2.不同数据类型之间能否随意转化:

虽然Python提供了一些内置的函数来实现不同数据类型之间的转换,如int(), float(), str(), list(), tuple(), set()等等,但并非所有类型的数据都可以被转换成其他任意类型。转换是否可行,主要取决于数据本身是否包含足够的信息来表示目标类型。

例如:

  1. 你可以轻松地将整数转换为字符串,因为每一个整数都有一个明确的字符串表示(例如,整数123可以表示为字符串"123")。
  2. 类似地,一个只包含数字字符的字符串(如"123")可以被转换为一个整数或浮点数,因为这个字符串中包含了足够的信息来表示一个数字。

然而:

  1. 对于一个非数字字符串(如"Hello"),它无法被转换为一个整数或浮点数,因为这个字符串并不包含任何可以表示一个数字的信息。
  2. 对于一个列表或元组,它可以被转换为一个集合(如果它的元素是不可变的),但不能被转换为一个整数,因为一个集合或列表中的元素无法合理地表示为一个单独的数字。

总的来说,数据类型的转换并非无限制,它取决于原始数据是否能够提供足够的信息来表示目标类型。当你在编程中进行类型转换时,需要注意这一点。

希望这篇文章能帮助你更好地理解Python中的数据类型转换。好了,时间不早了今天就分享到这里,感谢你耐心地阅读!