一、为什么先学它们?
在真实代码里,90 % 的 bug 都源于「拿到的是 A 类型,却当成 B 类型用」。
把「不确定」变成「确定」——这就是类型转换三兄弟的核心价值。
二、三兄弟速览
函数 | 一句话定位 | 常见输入 | 失败会怎样 |
---|---|---|---|
int(x) | 把 x 变成整数 | ‘42’, 3.14, True | ValueError |
float(x) | 把 x 变成浮点数 | ‘3.14’, 7, ‘7e-2’ | ValueError |
str(x) | 把任何东西变成字符串 | 123, [1,2], None | 永不抛错 |
三、6 个一行代码场景
- 命令行参数秒变整数
port = int(sys.argv[1]) # 运行:python app.py 8000
- 四舍五入不踩坑
price = round(float(input()), 2) # 输入 3.14159 → 3.14
- 布尔其实是 0 / 1
flag = bool(int(os.getenv("DEBUG", "0"))) # 环境变量 DEBUG=1
- 列表元素批量转数字
nums = list(map(int, ['10', '20', '30']))
- 拼接日志不手动 +
logger.info(f"User {user_id} spent {str(amount)} coins")
- 空字符串陷阱
if not s or int(s) <= 0: # 防止 int('') 抛 ValueErrorraise ValueError("请输入正整数")
四、mini 实战:一行命令行计算器
# calc.py
import sys
a, op, b = sys.argv[1], sys.argv[2], sys.argv[3]
print(eval(f"int({a}) {op} int({b})"))
运行:
$ python calc.py 3 + 5
8
五、记忆口诀
“int 砍小数,float 留小数,str 全变字符; 输入先 strip()
,再转不迷路。”
下篇预告
第 ② 篇《统计与迭代 6 件套》:len / sum / sorted / enumerate / zip / any —— 用一行代码把「循环」写没。