当前位置:首页>python>第 17 课 Python数据类型转换

第 17 课 Python数据类型转换

  • 2026-09-20 22:12:27
第 17 课 Python数据类型转换

类型转换是编写代码时非常高频的操作,里面存在大量容易出错的细节陷阱,学习结束之后欢迎在评论区留下你的测试代码、疑问,大家一起交流学习!

一、课程前言

前面课程我们已经学习整数、浮点数、字符串、布尔、列表、元组、字典、集合等基础数据类型。

在实际开发过程中,经常需要改变变量的数据类型,例如:输入框接收的内容默认是字符串,无法直接进行加减运算,就需要转为数字。

Python 的类型转换分为隐式自动转换、显式强制转换两大类,本节课完整讲解全部内置转换函数、代码案例以及高频易错细节。

二、基础概念讲解

1. 隐式类型转换(自动转换)

Python 会在运算的时候,自动把低精度的数据转向高精度类型,避免数据丢失,全程不需要手动调用函数。

转换优先级:布尔 → 整数 → 浮点数 → 复数

a = 10      # int整型b = 2.5     # float浮点数res = a + bprint(type(res)) # <class 'float'>,int自动转为浮点print(True + 5)  # True等价数值1,结果等于6

注意:字符串和数字之间无法自动转换,相加直接抛出报错,必须手动强制转换。

2. 显式(强制)类型转换

开发者调用系统内置函数,手动将一个数据转为别的类型;

强制转换只会生成一份全新的数据,不会修改原来的变量。

3. 全部内置转换函数总览表

函数

功能说明

int(x, [base])

转为整数,base可以设置进制

float(x)

转为浮点数

complex(real, [imag])

生成复数

str(x)

转为普通字符串

repr(x)

转为程序可识别的表达式字符串

eval(字符串)

解析并且运行字符串内部的Python表达式

tuple(s)

序列转为元组

list(s)

序列转为列表

set(s)

转为可变集合

dict(s)

嵌套键‑值序列生成字典

frozenset(s)

生成不可变冻结集合

chr(数字)

Unicode编码转为对应字符

ord(字符)

单个字符转为Unicode编码数值

hex(整数)

转为十六进制字符串,前缀0x

oct(整数)

转为八进制字符串,前缀0o

bin(整数)

转为二进制字符串,前缀0b

注:Python3 已经取消 long() 长整型,整数类型统一为 int。

三、分模块代码案例、使用规则和坑点

(一)数值类转换 int()、float()、complex()

1、int() 整型转换

语法:int(待转换数据, base=进制)

# 浮点数转整数:直接截断小数,不会四舍五入print(int(3.9))    # 输出3print(int(-2.6))   # 输出‑2# 纯数字字符串转整数print(int("123"))# base参数,按照指定进制解析字符串print(int("1101",2)) # 将二进制1101转十进制13

高频坑点

1. int("12.5") 直接报错,带小数点的字符串不能直接转为int;需要先float再int

2. 文字、符号类字符串无法转为数字

2、float() 浮点转换

print(float(6))        # 6.0print(float("3.14"))print(float(True))     # 1.0print(float(False))    # 0.0

3、complex()复数

print(complex(3,5)) # 3+5jprint(complex("2+4j"))
(二)字符串相关 str()、repr()、eval()

1. str():面向普通人阅读的字符串格式,所有类型都能够转换成字符串

print(str(123))print(str([1,2,3]))print(str(True))

2. repr():面向编译器,可以还原出原始对象

text = "hello"print(str(text))    # helloprint(repr(text))   # 'hello',自带引号标记

3. eval() 执行字符串里面的代码

print(eval("1 + 8 * 2"))print(eval("[1,2,3]")) # 字符串列表转为真实列表

安全提醒:不要执行用户随意输入的eval代码,容易引发安全风险。

(三)序列容器互相转换 list、tuple、set、frozenset

# 字符串转列表print(list("python"))# 列表转元组print(tuple([10,20,30]))# 列表转集合(自动去重)print(set([1,1,2,2]))# 普通集合转为不可变冻结集合fs = frozenset([5,6,7])# fs.add(9) 冻结集合无法增删元素# 创建字典,传入成对嵌套序列print(dict([("name","小李"),("age",18)]))

(四)字符与编码 chr()、ord(),二者互为反向函数

# 编码数字转为字符print(chr(65))      # Aprint(chr(97))      # aprint(chr(9731))    # 雪花特殊符号# 单个字符转为Unicode编码print(ord("A")) #65

(五)进制转换 bin、oct、hex

输出结果为带前缀的字符串:0b二进制、0o八进制、0x十六进制

print(bin(10))   # '0b1010'print(oct(10))   # '0o12'print(hex(255))  # '0xff'

四、布尔转换 bool() 重点规则

下面所有数值经过 bool() 判断结果均为False,其余全部为True

1. 数字:0、0.0、0j

2. 空容器:""、[]、()、{}、空集合

3. None、False

print(bool(0))print(bool(""))print(bool([]))print(bool(-66)) # 非零数字Trueprint(bool("文字")) # 非空字符串True

五、全套特殊知识点 & 高频踩坑清单

1. 强制转换生成新对象,原变量不会改动

num = 3.8int(num)print(num) # 依旧等于3.8,原数据不变

2. 浮点数转整数直接舍弃小数,不进行四舍五入,需要四舍五入使用round()

3. 带小数点的字符串不能直接int转换

# 错误写法 int("5.6")# 正确写法print(int(float("5.6")))

4. 加号不能直接拼接字符串和数字

# print(10 + "20") 报错print(str(10)+"20")print(10 + int("20"))

5. set转换列表会自动清除重复元素,同时打乱原有顺序

6. frozenset属于只读集合,不能添加、删除元素,可以用来当做字典的键

7. str()适合展示给用户;repr()用于调试、还原代码对象

8. input函数接收的所有用户输入永远为字符串类型,做运算必须手动转换

六、课后练习题(共3题)

习题1(基础题)

现有字符串 s = "66.88",编写代码将它先转为浮点数,之后再转为整数。

习题2(易错题)

写出下面代码运行结果,并解释原因

print(int(5.99))print(bool("0"))print(bool(""))

习题3(综合实操)

接收字符串表达式 str_res = "3 + 7 * 2",利用eval函数计算表达式结果;再将最终结果转为字符串类型进行输出。

类型转换坑点很多,进制转换、eval、字符串转数字都是新手常出错的地方,如果代码报错或是知识点存在疑惑,可以在评论区留言,一起解决问题!

最新文章

随机文章