在 Python 中,变量的类型是明确的,不能在没有显式转换的情况下直接将一种类型的值赋给另一种不同类型的变量。例如,以下将字符串与整数直接相加会报错,这跟其它语言有所差异,其它语言会进行隐式转
a = "5"
b = 2
# c = a + b
# TypeError: can only concatenate str (not "int") to str
我们需要先将字符串 a 显示转换为 int,然后再进行相加,如下所示
a = "5"
b = 2
c = int(a) + b # 7
那么问题来了,Python 在什么场景下,会进行类型的隐式转换呢?作者进行了以下场景的总结汇总,在 Python 中,隐式转换(也称为自动类型转换)主要发生在以下几种特定情况下:
1、数值类型之间的转换
当进行算术运算时,Python 会自动将较小的数据类型转换为较大的数据类型。例如,int 会被转换为 float,以避免精度丢失。
a = 5 # int
b = 2.0 # float
c = a + b # a 会被转换为 float
# --------输出--------
# 7.0
即使是比较操作,但是只要双方都是数值类型,Python 会尝试将不同类型的值转换为相同类型进行比较
print(5 < 5.0) # int 被转换为 float
# --------输出--------
# False
当使用一些函数处理不同类型的元素时,只要双方都是数值类型,Python 会尝试进行隐式转换。
print(max(1, 2.5)) # int 被转换为 float
# --------输出--------
# 2.5
2、布尔值与数值的运算
在进行算术运算时,True
和 False
会被分别转换为 1
和 0
result = True + 2
result
# --------输出--------
# 3
3、在 format()
或 f-string 中的类型转换
当格式化字符串时,非字符串类型会被自动转换为字符串。
value = 10
formatted = f"The value is {value}" # value 被转换为字符串
formatted
# --------输出--------
# 'The value is 10'
综上所述,上面的场景可总结为两种 Python 会尝试进行隐式转换:
(1)数值类型自身之间、以及和布尔值之间可以进行
(2)在 format()
或 f-string 中的类型转换
除以上两种总结的情形外,其它的类型放在一起运算时,都不会进行类型隐式转换,会导致以下两种异常情况产生:
1、程序执行报错
a = "5"
b = 2
# c = a + b
# TypeError: can only concatenate str (not "int") to str
2、结果不符预期
如下所示,因为不会将字符串 “1”隐式转换为 1,所以以下程序执行输出 None,没有找到对应的额属性
d = {1: "one", 2: "two"}
print(d.get("1")) # 期望输出:one
# --------输出--------
# None
所以大家平时编程中一定要注意类型匹配,养成良好的编程习惯,不然很容易得到非预期的程序结果,而花费很多的时间进行调试,耗时耗力,得不偿失!
如果你喜欢本文,欢迎点赞,并且关注我们的微信公众号:Python技术极客,我们会持续更新分享 Python 开发编程、数据分析、数据挖掘、AI 人工智能、网络爬虫等技术文章!让大家在Python 技术领域持续精进提升,成为更好的自己!