Python3 数据类型转换
Python3 数据类型转换
Python3 隐式类型转换和显式类型转换的方法
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。
Python 数据类型转换可以分为两种:
- 隐式类型转换 - 自动完成
- 显式类型转换 - 需要使用类型函数来转换
隐式类型转换
在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。
以下实例中,我们对两种不同类型的数据进行运算,较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失。
实例
num_int = 123num_flo = 1.23
num_new = num_int + num_flo
print("num_int 数据类型为:",type(num_int))print("num_flo 数据类型为:",type(num_flo))
print("num_new 值为:",num_new)print("num_new 数据类型为:",type(num_new))以上实例输出结果为:
num_int 数据类型为: <class 'int'>num_flo 数据类型为: <class 'float'>num_new: 值为: 124.23num_new 数据类型为: <class 'float'>代码解析:
- 实例中我们对两个不同数据类型的变量
num_int和num_flo进行相加运算,并存储在变量num_new中。 - 然后查看三个变量的数据类型。
- 在输出结果中,我们看到
num_int是整型(integer),num_flo是浮点型(float)。 - 同样,新的变量
num_new是浮点型(float),这是因为 Python 会将较小的数据类型转换为较大的数据类型,以避免数据丢失。
我们再看一个实例,整型数据与字符串类型的数据进行相加:
实例
num_int = 123num_str = "456"
print("num_int 数据类型为:",type(num_int))print("num_str 数据类型为:",type(num_str))
print(num_int+num_str)以上实例输出结果为:
num_int 数据类型为: <class 'int'>num_str 数据类型为: <class 'str'>Traceback (most recent call last): File "/runoob-test/test.py", line 7, in <module> print(num_int+num_str)TypeError: unsupported operand type(s) for +: 'int' and 'str'从输出中可以看出,整型和字符串类型运算结果会报错,输出 TypeError。 Python 在这种情况下无法使用隐式转换。
但是,Python 为这些类型的情况提供了一种解决方案,称为显式转换。
显式类型转换
在显式类型转换中,用户将对象的数据类型转换为所需的数据类型。 我们使用 int()、float()、str() 等预定义函数来执行显式类型转换。
int() 强制转换为整型:
实例
x = int(1) # x 输出结果为 1y = int(2.8) # y 输出结果为 2z = int("3") # z 输出结果为 3float() 强制转换为浮点型:
实例
x = float(1) # x 输出结果为 1.0y = float(2.8) # y 输出结果为 2.8z = float("3") # z 输出结果为 3.0w = float("4.2") # w 输出结果为 4.2str() 强制转换为字符串类型:
实例
x = str("s1") # x 输出结果为 's1'y = str(2) # y 输出结果为 '2'z = str(3.0) # z 输出结果为 '3.0'整型和字符串类型进行运算,就可以用强制类型转换来完成:
实例
num_int = 123num_str = "456"
print("num_int 数据类型为:", type(num_int))print("类型转换前,num_str 数据类型为:", type(num_str))
num_str = int(num_str) # 强制转换为整型print("类型转换后,num_str 数据类型为:", type(num_str))
num_sum = num_int + num_str
print("num_int 与 num_str 相加结果为:", num_sum)print("sum 数据类型为:", type(num_sum))以上实例输出结果为:
num_int 数据类型为: <class 'int'>类型转换前,num_str 数据类型为: <class 'str'>类型转换后,num_str 数据类型为: <class 'int'>num_int 与 num_str 相加结果为: 579sum 数据类型为: <class 'int'>以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
| 函数 | 描述 |
|---|---|
| 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) | 将一个整数转换为一个八进制字符串 |
| bool(x) | 将对象 x 转换为布尔值(True 或 False) |
| bytes([source[, encoding[, errors]]]) | 将对象转换为不可变字节序列 |
| bytearray([source[, encoding[, errors]]]) | 将对象转换为可变字节数组 |
| memoryview(obj) | 返回给定参数的内存视图对象(不复制数据) |
| bin(x) | 将一个整数转换为一个二进制字符串 |
| ascii(x) | 返回对象的 ASCII 表示,非 ASCII 字符会被转义 |
练习题
-
1. 隐式类型转换 创建文件
test_implicit.py,完成以下操作:- 创建变量
a = 10(整数)和b = 3.14(浮点数) - 计算
c = a + b - 用
type()打印a、b、c的类型 - 观察结果,解释为什么
c是浮点数
参考答案:
a = 10b = 3.14c = a + bprint(f"a = {a}, 类型: {type(a)}")print(f"b = {b}, 类型: {type(b)}")print(f"c = {c}, 类型: {type(c)}")# 输出:# a = 10, 类型: <class 'int'># b = 3.14, 类型: <class 'float'># c = 13.14, 类型: <class 'float'># 解释:Python 会自动将整数转换为浮点数,避免数据丢失 - 创建变量
-
2. int() 转换练习 创建文件
test_int.py,完成以下操作:- 将浮点数
3.14转换为整数 - 将字符串
"123"转换为整数 - 将字符串
"3.14"转换为整数(观察是否报错) - 打印每个结果及其类型
参考答案:
a = int(3.14)b = int("123")# c = int("3.14") # 这行会报错,因为不能直接将小数字符串转为整数print(f"int(3.14) = {a}, 类型: {type(a)}") # 3, <class 'int'>print(f"int('123') = {b}, 类型: {type(b)}") # 123, <class 'int'># 如果要转换 "3.14",需要先转为 float 再转 int:c = int(float("3.14"))print(f"int(float('3.14')) = {c}") # 3 - 将浮点数
-
3. float() 转换练习 创建文件
test_float.py,完成以下操作:- 将整数
100转换为浮点数 - 将字符串
"3.14"转换为浮点数 - 将字符串
"100"转换为浮点数 - 打印每个结果及其类型
参考答案:
a = float(100)b = float("3.14")c = float("100")print(f"float(100) = {a}, 类型: {type(a)}") # 100.0, <class 'float'>print(f"float('3.14') = {b}, 类型: {type(b)}") # 3.14, <class 'float'>print(f"float('100') = {c}, 类型: {type(c)}") # 100.0, <class 'float'> - 将整数
-
4. str() 转换练习 创建文件
test_str.py,完成以下操作:- 将整数
123转换为字符串 - 将浮点数
3.14转换为字符串 - 将布尔值
True转换为字符串 - 打印每个结果及其类型,并用
+拼接字符串
参考答案:
a = str(123)b = str(3.14)c = str(True)print(f"str(123) = '{a}', 类型: {type(a)}") # '123', <class 'str'>print(f"str(3.14) = '{b}', 类型: {type(b)}") # '3.14', <class 'str'>print(f"str(True) = '{c}', 类型: {type(c)}") # 'True', <class 'str'>print(f"拼接: 数字是 {a}") # 拼接: 数字是 123 - 将整数
-
5. bool() 转换练习 创建文件
test_bool.py,用bool()测试以下值,记录哪些是True,哪些是False:0、1、-1""、"0"、"False"[]、[0]None
参考答案:
print(f"bool(0) = {bool(0)}") # Falseprint(f"bool(1) = {bool(1)}") # Trueprint(f"bool(-1) = {bool(-1)}") # Trueprint(f"bool('') = {bool('')}") # Falseprint(f"bool('0') = {bool('0')}") # True(非空字符串)print(f"bool('False') = {bool('False')}") # True(非空字符串)print(f"bool([]) = {bool([])}") # Falseprint(f"bool([0]) = {bool([0])}") # True(非空列表)print(f"bool(None) = {bool(None)}") # False -
6. list() 转换练习 创建文件
test_list.py,完成以下操作:- 将字符串
"hello"转换为列表 - 将元组
(1, 2, 3)转换为列表 - 将集合
{3, 1, 2}转换为列表(观察顺序) - 打印每个结果
参考答案:
a = list("hello")b = list((1, 2, 3))c = list({3, 1, 2})print(f"list('hello') = {a}") # ['h', 'e', 'l', 'l', 'o']print(f"list((1,2,3)) = {b}") # [1, 2, 3]print(f"list({3,1,2}) = {c}") # 顺序可能不同,因为集合是无序的 - 将字符串
-
7. tuple() 转换练习 创建文件
test_tuple.py,完成以下操作:- 将字符串
"Python"转换为元组 - 将列表
[10, 20, 30]转换为元组 - 打印每个结果及其类型
参考答案:
a = tuple("Python")b = tuple([10, 20, 30])print(f"tuple('Python') = {a}") # ('P', 'y', 't', 'h', 'o', 'n')print(f"tuple([10,20,30]) = {b}") # (10, 20, 30)print(f"类型: {type(b)}") # <class 'tuple'> - 将字符串
-
8. set() 转换练习 创建文件
test_set.py,完成以下操作:- 将列表
[1, 2, 2, 3, 3, 3]转换为集合(观察去重效果) - 将字符串
"aabbbccc"转换为集合 - 打印每个结果
参考答案:
a = set([1, 2, 2, 3, 3, 3])b = set("aabbbccc")print(f"set([1,2,2,3,3,3]) = {a}") # {1, 2, 3}(自动去重)print(f"set('aabbbccc') = {b}") # {'a', 'b', 'c'}(自动去重) - 将列表
-
9. dict() 转换练习 创建文件
test_dict.py,完成以下操作:- 用
dict()从键值对列表创建字典:[("name", "小明"), ("age", 18)] - 用字典推导式创建字典:
{x: x**2 for x in range(1, 5)} - 打印每个结果
参考答案:
a = dict([("name", "小明"), ("age", 18)])b = {x: x**2 for x in range(1, 5)}print(f"dict() 创建: {a}") # {'name': '小明', 'age': 18}print(f"推导式创建: {b}") # {1: 1, 2: 4, 3: 9, 4: 16} - 用
-
10. eval() 和 repr() 练习 创建文件
test_eval.py,完成以下操作:- 用
eval()计算字符串"3 + 5 * 2"的结果 - 用
repr()将浮点数3.14转换为表达式字符串 - 打印每个结果及其类型
参考答案:
a = eval("3 + 5 * 2")b = repr(3.14)print(f"eval('3 + 5 * 2') = {a}") # 13print(f"类型: {type(a)}") # <class 'int'>print(f"repr(3.14) = {b}") # '3.14'print(f"类型: {type(b)}") # <class 'str'> - 用
-
11. chr() 和 ord() 练习 创建文件
test_char.py,完成以下操作:- 用
chr()将数字65、97、48转换为字符 - 用
ord()将字符'A'、'a'、'0'转换为数字 - 打印每个结果
参考答案:
print(f"chr(65) = {chr(65)}") # Aprint(f"chr(97) = {chr(97)}") # aprint(f"chr(48) = {chr(48)}") # 0print(f"ord('A') = {ord('A')}") # 65print(f"ord('a') = {ord('a')}") # 97print(f"ord('0') = {ord('0')}") # 48 - 用
-
12. hex() 和 oct() 练习 创建文件
test_hex.py,完成以下操作:- 用
hex()将数字255、16、10转换为十六进制字符串 - 用
oct()将数字8、16、255转换为八进制字符串 - 打印每个结果
参考答案:
print(f"hex(255) = {hex(255)}") # 0xffprint(f"hex(16) = {hex(16)}") # 0x10print(f"hex(10) = {hex(10)}") # 0xaprint(f"oct(8) = {oct(8)}") # 0o10print(f"oct(16) = {oct(16)}") # 0o20print(f"oct(255) = {oct(255)}") # 0o377 - 用
评论区
如果你喜欢,那么欢迎来到我的世界!
了解更多













