Skip to content

Python 类型转换:让数据变形的魔法

在 Python 的世界里,数据有各种各样的类型,比如整数、小数、字符串等等。但有时候,我们需要把一种类型的数据转换成另一种类型,这就是类型转换 (Type Conversion),也称为类型转换 (Type Casting)

简单来说,类型转换就像给数据做了一个变形手术,让它以新的面貌示人。Python 支持两种类型转换方式:隐式类型转换和显式类型转换。

1. 隐式类型转换:悄无声息的改变

隐式类型转换是指 Python 解释器在执行代码时,自动地将数据类型进行转换,而不需要我们手动干预。这种转换通常发生在运算符两边的操作数类型不一致的时候。Python 会尝试将其中一种类型转换为另一种类型,以便进行计算。

通常,Python 会将精度较低的类型转换为精度较高的类型。例如,整数 (int) 可以自动转换为浮点数 (float)。

让我们来看一个例子:

python
a = 1   # 整数类型
b = 2.0 # 浮点数类型
c = a + b
print(c)       # 输出:3.0
print(type(c))  # 输出:<class 'float'>

在这个例子中,a 是整数,b 是浮点数。当 ab 相加时,Python 自动将 a 转换为浮点数,然后再进行计算,最终结果 c 也是浮点数。这就是隐式类型转换,它在背后默默地工作,让我们的代码更加简洁。

2. 显式类型转换:主动出击,指哪打哪

显式类型转换是指我们使用 Python 内置的函数,明确地指定要将数据转换为哪种类型。这种方式更加灵活,可以满足我们更精确的类型转换需求。

Python 提供了以下常用的内置函数来进行显式类型转换:

  • int(): 将其他类型的数据转换为整数。
  • float(): 将其他类型的数据转换为浮点数。
  • str(): 将其他类型的数据转换为字符串。
  • tuple(): 将可迭代对象(如字符串、列表、集合、range 对象)转换为元组。
  • list(): 将可迭代对象转换为列表。
  • set(): 将可迭代对象转换为集合。

下面我们来详细了解这些函数的使用方法:

2.1 int():变身整数的魔法

int() 函数可以将布尔值 (bool)、浮点数 (float) 或字符串 (str) 转换为整数。

python
print(int(True))    # 输出:1 (True 转换为 1,False 转换为 0)
print(int(2.3))     # 输出:2 (直接截取整数部分,不会四舍五入)
print(int("2"))     # 输出:2 (字符串必须是整数形式,否则会报错)

需要注意的是,当使用 int() 转换字符串时,字符串必须是整数形式,不能包含小数点或其他非数字字符,否则会抛出 ValueError 异常。

2.2 float():化身小数的利器

float() 函数可以将布尔值 (bool)、整数 (int) 或字符串 (str) 转换为浮点数。

python
print(float(True))   # 输出:1.0
print(float(2))      # 输出:2.0
print(float("2.3"))   # 输出:2.3
print(float("Infinity")) # 输出:inf (表示无穷大)
print(float("inf"))      # 输出:inf
print(float("nan"))      # 输出:nan (表示非数字)

float() 函数还可以识别一些特殊的字符串,例如 "Infinity"、"inf" 和 "nan",分别表示无穷大和非数字。

此外,浮点数字面量还可以包含以下字符:

  • .: 表示数字的小数部分。
  • eE: 表示数字的指数部分。
python
print(float("3.14"))    # 输出:3.14
print(float("10."))     # 输出:10.0
print(float("1e100"))    # 输出:1e+100 (表示 1 乘以 10 的 100 次方)
print(float("3.14e-10")) # 输出:3.14e-10 (表示 3.14 乘以 10 的负 10 次方)

2.3 str():穿上字符串的外衣

str() 函数可以将任何对象转换为字符串。

python
print(str(2))         # 输出:'2'
print(str([1, 2, 3]))  # 输出:'[1, 2, 3]'
print(str((4, 5, 6)))  # 输出:'(4, 5, 6)'

str() 函数可以将数字、列表、元组等各种类型的数据转换为字符串,方便我们进行字符串操作。

2.4 tuple():组装成元组的魔方

tuple() 函数可以将字符串 (str)、列表 (list)、集合 (set) 或 range 对象转换为元组。元组是一种不可变的序列,用小括号 () 表示。

python
print(tuple('hello'))    # 输出:('h', 'e', 'l', 'l', 'o')
print(tuple([1, 2, 3]))   # 输出:(1, 2, 3)
print(tuple({4, 5, 6}))   # 输出:(4, 5, 6) (集合是无序的,转换后的元组顺序不确定)
print(tuple(range(5)))   # 输出:(0, 1, 2, 3, 4)

2.5 list():排列成列表的队列

list() 函数可以将字符串 (str)、元组 (tuple)、集合 (set) 或 range 对象转换为列表。列表是一种可变的序列,用中括号 [] 表示。

python
print(list('hello'))    # 输出:['h', 'e', 'l', 'l', 'o']
print(list((1, 2, 3)))   # 输出:[1, 2, 3]
print(list({4, 5, 6}))   # 输出:[4, 5, 6] (集合是无序的,转换后的列表顺序不确定)
print(list(range(5)))   # 输出:[0, 1, 2, 3, 4]

2.6 set():收集成集合的容器

set() 函数可以将字符串 (str)、元组 (tuple)、列表 (list) 或 range 对象转换为集合。集合是一种无序且不重复的容器,用花括号 {} 表示。

python
print(set('hello'))    # 输出:{'l', 'o', 'e', 'h'} (集合会自动去重,且顺序不确定)
print(set([1, 2, 3, 2])) # 输出:{1, 2, 3} (重复的元素被移除)
print(set((4, 5, 6)))   # 输出:{4, 5, 6}
print(set(range(5)))   # 输出:{0, 1, 2, 3, 4}

类型转换是 Python 编程中一项基本而重要的技能。通过隐式类型转换,Python 可以自动地进行一些简单的类型转换。而通过显式类型转换,我们可以更加灵活地控制数据的类型,满足各种各样的需求。