2.1 确定类型
有时候在某些代码中,我们不知道变量中存储的是什么数据。为此,Python 提供了 函数 type(),用于确定对象的类型。
这是一个内置函数,会返回指定对象的类型。这在调试、数据验证或者基于数据类型实现逻辑时都挺有用。
type() 函数的工作原理
当你调用 type(x) 时,Python 会返回一个特殊对象 type,它表示变量 x 的类型。例如:
x = 1
print(type(x)) # 输出: <class 'int'>
x = "你好"
print(type(x)) # 输出: <class 'str'>
x = [1, 2, 3]
print(type(x)) # 输出: <class 'list'>
注意,上面输出的会包含 class 这个词。这是因为,即便是 int, str, list 等类型,它们其实也是类,只不过是 Python 的内置类,不需要我们自己定义,Python 默认就提供了。
实用场景
type() 函数在以下场景中经常使用:
- 根据变量的类型执行不同的操作。
- 在函数或方法中检查参数类型是否正确。
如果你想确保变量中存储的是一个数字,可以写如下代码:
arg = 123
if type(arg) == int:
print(arg + 10) # 输出: 133
更实际的例子是,检查变量中存储的对象类型:
arg = "123"
if type(arg) == int:
print(arg + 10) # 不会执行,因为 arg 是字符串
elif type(arg) == str:
print(arg + " world") # 输出: 123 world
else:
print("未知类型")
2.2 显式类型指定
在 Python 中,可以通过类型转换函数明确指定对象的类型,比如 int()、float()、str()、tuple() 等。这些函数可以将一种类型的数据转换为另一种类型,比如处理用户输入、执行数学操作或者处理字符串和数据集合时特别方便。
类型转换函数示例
int(): 将数据转换为整数。我们已经多次接触过这个函数,它可以将表示数字的字符串转换为对应的整数。
num = int("123") # num 现在是整数 123
float(): 我们也很熟悉这个函数,用于将数据转换为浮点数。
num = float("123.45") # num 现在是 123.45
str(): 将任意 Python 对象转换为字符串。
s = str(10.5) # s 现在是 '10.5'
tuple(): 将序列转换为元组。
t = tuple([1, 2, 3]) # t 现在是 (1, 2, 3)
list(): 将可迭代对象(比如字符串或元组)转换为列表。可迭代对象是可以被逐一遍历的对象,比如字符串、列表或元组。
l = list("abc") # l 现在是 ['a', 'b', 'c']
dict(): 从键值对序列创建字典。
d = dict([(1, 'a'), (2, 'b')]) # d 现在是 {1: 'a', 2: 'b'}
关于字典和元组我们会稍后讲解,不过我想你已经大概明白了:如果需要明确指定某种类型,可以使用上述这些函数。
2.3 类型转换
在 Python 中,显式类型转换允许开发者控制并改变变量的数据类型。这在保证数据兼容性、处理用户输入或从文件读取数据时特别有用。本质上,类型转换和类型强制指的是同一个东西——把一个对象的类型改为另一种类型。
我们之前已经接触过一些显式类型转换的方法。在 Python 中,可以通过内置函数,比如 int()、float()、str()、tuple()、list()、dict() 和 set() 来实现。
为了巩固理解,再来看一些例子:
| 函数 | 描述 | 示例输入 | 示例输出 |
|---|---|---|---|
int() |
转换为整数 | int("10") | 10 |
float() |
转换为浮点数 | float("20.5") | 20.5 |
str() |
转换为字符串 | str(15) | "15" |
tuple() |
转换为元组 | tuple([1, 2, 3]) | (1, 2, 3) |
list() |
转换为列表 | list("abc") | ['a', 'b', 'c'] |
dict() |
从键值对创建字典 | dict([(1, 'one'), (2, 'two')]) | {1: 'one', 2: 'two'} |
set() |
从列表创建集合 | set([1, 1, 2, 2, 3, 3]) | {1, 2, 3} |
使用场景
显式类型转换在很多场景中都有应用,包括:
- 处理用户输入: 确保输入的数据符合预期的数据类型。
- 数据互操作性: 当来自不同来源或 API 的数据需要合并或比较时使用。
- 错误处理: 在执行操作前转换数据为合适的类型,避免运行时错误。
最佳实践和注意事项
显式类型转换需要谨慎使用,避免数据丢失(比如将 float 转换为 int 时)或者转换错误(比如尝试将非数字字符串转换为数字)。
还要注意有些转换可能不那么显而易见,可能导致意料之外的结果,因此需要仔细检查数据。例如,将 int 转换为 bool 及其反向操作可能带来一些“意外的惊喜” :)
GO TO FULL VERSION