python 3 是对 python 2 的语言级重构,放弃兼容性以解决编码混乱、除法语义模糊等问题;主流框架与云平台已全面转向 python 3.8+,python 2.7 已于 2020 年 1 月退役。

Python 2 和 Python 3 不是简单升级,而是语言层面的重构。核心差异在于:Python 3 主动放弃兼容性,只为解决 Python 2 中长期存在的设计缺陷——比如字符串编码混乱、除法语义模糊、类型系统松散等。如今所有主流框架(Django、PyTorch、Pandas)和云平台(AWS Lambda、Google Cloud Functions)只支持 Python 3.8 及以上,Python 2.7 已于 2020 年 1 月正式退役。
语法与内置行为的关键变化
这些改动直接影响日常编码习惯,不是“写法不同”,而是“语义不同”:
-
print:Python 2 是语句(
print "hello"),Python 3 是函数(print("hello")),支持sep、end等参数,更灵活可控 -
除法运算:
/在 Python 2 中对整数执行“截断除法”(5/2 → 2),在 Python 3 中统一为真除法(5/2 → 2.5);整除必须显式用// -
输入函数:
input()在 Python 2 中等价于eval(raw_input()),有安全隐患;Python 3 的input()始终返回字符串,安全且一致 -
异常处理:Python 2 支持两种写法(
except ValueError, e:或except ValueError as e:),Python 3 只保留as形式,消除歧义
字符串与编码模型彻底统一
这是 Python 3 最根本的改进之一。Python 2 把字符串分为 str(字节序列)和 unicode(文本),但默认 str 是字节,极易在中文、日文等场景下报 UnicodeDecodeError。Python 3 明确定义:
-
str类型专用于人类可读的文本(UTF-8 编码的 Unicode 字符串) -
bytes类型专用于原始二进制数据(如图片、网络包、文件内容) - 文件打开默认使用文本模式并自动解码,二进制模式需显式指定
mode='rb' - 所有源码文件默认以 UTF-8 解析(无需写
# -*- coding: utf-8 -*-)
标准库与生态的结构性优化
Python 3 对标准库做了大量清理和重组织,目标是减少冗余、提升一致性:
立即学习“Python免费学习笔记(深入)”;
- 模块重命名:例如
urllib2(2.x)拆分为urllib.request和urllib.error(3.x);ConfigParser改为configparser(小写) - 移除过时模块:如
anydbm、dl、md5(被hashlib替代)等不再维护 - 新增关键模块:如
pathlib(面向对象路径操作)、dataclasses(简化类定义)、zoneinfo(IANA 时区支持) - 迭代器普遍化:
map、filter、range等返回迭代器而非列表,节省内存
从 3.0 到 3.14:演进主线清晰可见
Python 3 不是静态终点,而是一条持续强化的演进路径。近十年的主线集中在三个方向:
-
类型系统深化:从 3.5 引入
typing模块和函数注解,到 3.9 支持泛型内置(list[int]),再到 3.12+ 对运行时类型检查的支持增强,为大型项目提供更强保障 -
并发与异步能力升级:3.4 引入
asyncio,3.5 加入async/await语法,3.11 优化异步调度器性能,3.14 开发中正加强结构化并发(taskgroup)和取消传播机制 - 性能底层突破:3.11 启用“快速调用协议”提升函数调用速度;3.12 推出“零开销异常”优化;Faster CPython 项目已在 3.13+ 中逐步落地 JIT 编译雏形,部分数值密集型代码提速可达 2–5 倍










