Python 的发展并非一帆风顺。最重大的断代事件就是 Python 2 到 Python 3 的迁移。了解这段历史和版本特性,可以帮你理解一些老代码的写法,也能让你更好地利用新版 Python 带来的便利。
Python 2 与 Python 3 核心差异
Python 3 于 2008 年发布,设计目标是清理语言中积累的冗余和不一致。由于改动大且不向后兼容,整个社区花了近十年才完成迁移。Python 2 已于 2020 年 1 月 1 日正式停止维护,现在新项目应全部使用 Python 3。
对普通开发者来说,印象最深的差异主要有这几条:
| 方面 | Python 2 | Python 3 |
|------|----------|----------|
| print | 语句,print "hello" | 函数,print("hello") |
| 整数除法 | 3/2 得 1(地板除) | 3/2 得 1.5(真除法),3//2 得 1 |
| 字符串 | 默认是字节串(str 是 bytes),Unicode 须加前缀 u"你好" | 默认是 Unicode(str 是文本),字节串用 b"bytes" |
| range | 返回列表,range(100) 立刻生成 100 个整数 | 返回惰性的 range 对象,省内存,行为类似生成器 |
| 异常 | 捕获语法 except Exception, e: | 必须用 except Exception as e: |
| 迭代对象 | 很多方法返回列表(如 dict.keys()) | 返回动态视图,支持集合运算 |
| input | input() 自动将输入当作表达式求值(危险),通常用 raw_input() | input() 始终返回字符串,安全且统一 |
实用总结:如果你在维护老代码或看历史资料,遇到上述差异时,心里有个对照就行。日常开发中只要记住:Python 3 的字符串是文本(Unicode)、print 要加括号、整数除法默认得出小数,这三条就足够让你避开 90% 的坑。
Python 3.x 的年度新特性
Python 从 3.6 开始基本确立了“一年一个大版本”的节奏(通常在每年 10 月)。每个新版本都会引入一些语言特性、性能优化或标准库改进。以下列出对实际开发影响较大的亮点,按版本过渡区分为“已普及的常用特性”和“较新版本特性”。
已广泛使用的特性(Python 3.6 - 3.9)
- 3.6:
- f-string:
f"Hello {name}"大幅提升字符串格式化体验,成为现在主流写法。 - 变量注释:
name: str = "Alice",为类型提示铺路。 - 字典保持插入顺序(3.7 正式纳入语言规范)。
- 3.7:
- dataclasses:用
@dataclass装饰器自动生成初始化、比较等方法,简化数据类的定义。 async/await成为正式关键字。- 3.8:
- 海象运算符
:=:允许在表达式中完成赋值,如if (n := len(a)) > 10:,省去一行单独赋值。 - 仅位置参数语法:
def f(a, b, /)表示 a、b 只能通过位置传递。 - 3.9:
- 字典合并运算符:
d1 | d2和d1 |= d2,合并多个字典更直观。 - 字符串方法
removeprefix/removesuffix,替代手动切片。
近期版本特性(Python 3.10 - 3.12)
- 3.10:
- 结构化模式匹配
match...case:类似其他语言的 switch/case,但更强大,支持解构和条件守卫。这是 Python 在代码可读性方面的重大更新。 - 更好的错误提示信息:语法错误能精确指出缺失括号或拼写错误的位置。
- 3.11:
- 性能大幅提升:官方宣称平均加速 10-60%,纯 Python 代码跑得更快。
- 异常组与
except*语法,便于处理并发任务中的多个异常。 - 3.12:
- 更灵活的 f-string 解析:可以在 f-string 内使用引号、多行表达式。
- 改进的
typing模块,类型提示语法更简洁(如type语句用于类型别名)。 - 性能持续优化。
如何选择 Python 版本?
- 新项目:直接选用你开发环境能安装的最新稳定版(目前通常为 3.11 或 3.12),享受性能提升和新语法糖。
- 维护老项目:看项目的 Python 版本下限。如果团队允许,可以升级到 3.10+,重点是用好模式匹配、海象运算符这类提高可读性的特性。
- 依赖库兼容性:发布前检查你依赖的第三方库是否支持你所选的 Python 版本,尤其是在使用像 PyTorch、TensorFlow 这种有明确版本要求的库时。
总之,Python 3.x 的演进是在保持语言简洁优雅的前提下,逐步吸收现代编程语言的优秀特性,同时稳步提升性能。开发者只需要持续关注 Python 官方的“What’s New”文档,就能轻松跟上游的步伐。