类型转换
把一种类型的值,换成另一种类型。
它是什么
类型转换 是把一种 类型 变成另一种。
电脑不会随便把文字当数字用。 你要开口请它换。 换成功了,才能做另一种运算。
三个最常用的帮手:
int()转整数float()转小数str()转 字符串
print(int("12") + 1) # 13
print(float("3") * 2) # 6.0
print("明年" + str(12)) # 明年12还有 bool(),用来得到真或假。
空字符串、数字 0,转成布尔值常常是 False。
非空文字、非零数字,常常是 True。
名字从哪来
转换的英文常叫 conversion。 有的语言叫 cast,中文有时译成「强制类型转换」。
早期语言里,整数和小数在芯片上的放法就不一样。 写程序的人必须明确:我要把这份数据按另一种说明书来读。
Python 把常见转换做成了看起来像函数的名字:int、float、str。
它们其实也是类型的名字。
喊类型的名字并加上括号,就是「请按这个类型重新做一份」。
这和数学课上的单位换算有点像。 3 米可以换成 300 厘米。 不换的话,不能和「厘米」直接相加。
它怎么工作
转换常常做出新值。 旧的盒子不一定被改掉。
text = "8"
n = int(text)
print(text) # 还是字符串
print(n) # 整数 8input 得到字符串。 要计算就先转。
哪些转得动:
int("12")可以float("3.5")可以float("3")可以,得到3.0int(3.9)可以,得到3,小数部分直接丢掉,不是四舍五入str(True)可以,得到"True"int("3.2")不行,整数不要小数点int("十二")不行int("")不行
失败时会出现 ValueError。
先看内容像不像一个数。
详见 调试。
str() 几乎总能把别的值变成文字。
数字、真假、列表都可以变。
列表变成文字后,是带方括号的那一串字,不能再当列表用下标乱改。
int(True) 是 1。
int(False) 是 0。
这是历史习惯,和 逻辑运算 有关。
想保留两位小数,转换之后还常用 round。
见 内置函数。
生活里在哪里
- 把「三十二」说成 32,才能用计算器加。
- 把 85 分写进奖状,变成文字「85」。
- 汇率:把一种货币的数字,按比率换成另一种。
- 食谱:把 1 杯牛奶估成毫升。不换单位,很难倒准。
- 温度:摄氏和华氏是两种刻度,数字不能直接比。
程序里最常见的现场:键盘进来的是字,算术需要的是数。 中间必须有人做翻译。 这个翻译就是类型转换。
和相近概念的差别
类型转换是「变成另一种」。 比较 是「问问相不相等、谁更大」,不改变原来的值。
3 == 3.0 可以是真。
这不是把整数变成了小数。
两边仍是两种类型。
拼接 "3" + "1" 得到 "31",也不是转换。
那是字符串自己的加法。
int("3.2") 失败,不等于 int(float("3.2"))。
有小数点时,常常要先变成 float,必要时再 int。
常见误会
误会 1:文字和整数直接 +。
先统一类型。 要么都变成数去加,要么都变成字去拼。
误会 2:把 int("3.14") 当成功的例子。
有小数点,请用 float。
误会 3:转换后忘记赋值。
后面仍拿着旧字符串。 新值要放进盒子,才算换好了。
误会 4:int(3.9) 会得到 4。
直接丢掉小数部分,得到 3。
四舍五入请用 round。
误会 5:转换永远成功。
内容不像目标类型,就会报错。 报错是在说「这份材料换不了」,不是程序讨厌你。
想知道更多
- 书:潘洪波《小学生 Python 趣味编程》(用问答小程序练「先问、再转、再算」)。
- 书:埃里克·马瑟斯《Python 编程:从入门到实践》(输入之后立刻转换,是书里的常规写法,可和家长一起对照)。
未登录时不会保存学习进度