Python 3.9 引入的许多新特性和改进
Python 3.9 引入了许多新特性和改进,涵盖了语法增强、性能优化、标准库更新等方面。以下是 Python 3.9+ 的重要新特性汇总:
一、语法与语义增强
1. 字典合并运算符 (|
和 |=
)
Python 3.9 引入了更简洁的字典合并和更新运算符。
|
—— 合并两个字典并返回新字典|=
—— 将右侧字典的内容原地更新到左侧字典
示例:
# 字典合并 (| 运算符) dict1 = {'a': 1, 'b': 2} dict2 = {'b': 3, 'c': 4} merged_dict = dict1 | dict2 print(merged_dict) # 输出: {'a': 1, 'b': 3, 'c': 4} # 字典原地更新 (|= 运算符) dict1 |= dict2 print(dict1) # 输出: {'a': 1, 'b': 3, 'c': 4}
2. 类型提示增强(内置类型支持简化语法)
在 Python 3.9 之前,类型提示需使用 List
、Dict
等来自 typing
模块的类型别名。Python 3.9 后,支持使用内置类型直接作为类型提示。
示例:
# Python 3.8 及以下 from typing import List, Dict def process_data(data: List[int]) -> Dict[str, int]: return {"sum": sum(data)} # Python 3.9+ def process_data(data: list[int]) -> dict[str, int]: return {"sum": sum(data)}
✅
list
、dict
、tuple
、set
等原生类型可直接用于类型提示,语法更直观。
3. 字符串前缀 str.removeprefix()
/ str.removesuffix()
新方法 removeprefix()
和 removesuffix()
提供了更优雅的字符串处理方式,避免繁琐的切片操作。
示例:
text = "python_guide" # 移除前缀 print(text.removeprefix("python_")) # 输出: "guide" # 移除后缀 print(text.removesuffix("_guide")) # 输出: "python"
4. zoneinfo
时区支持
Python 3.9 引入了 zoneinfo
模块,内置了 IANA 时区数据库,更易于处理时区转换。
示例:
from zoneinfo import ZoneInfo from datetime import datetime dt = datetime.now(ZoneInfo("Asia/Shanghai")) print(dt) # 输出: 当前上海时间 (带时区信息)
二、标准库改进
1. math
模块新增常用函数
math.gcd()
:求最大公约数,已增强为支持多个参数。math.lcm()
:新增求最小公倍数 (Least Common Multiple)。
示例:
import math print(math.gcd(24, 36, 48)) # 输出: 12 print(math.lcm(4, 5, 6)) # 输出: 60
2. random
模块增强
random.Random
类新增了 randbytes()
方法,用于生成指定长度的随机字节流。
示例:
import random print(random.randbytes(8)) # 示例输出: b'\xa9\x0f\xe4\xd2\xf3\xbd@\x17'
3. statistics
模块增强
- 新增
statistics.multimode()
,用于找出出现频率最高的所有元素。
示例:
from statistics import multimode data = [1, 2, 2, 3, 3, 4] print(multimode(data)) # 输出: [2, 3]
4. functools
模块增强
functools.cache
提供了轻量级的缓存装饰器,类似lru_cache
,但没有最大缓存大小限制。
示例:
from functools import cache @cache def fibonacci(n): if n < 2: return n return fibonacci(n - 1) + fibonacci(n - 2) print(fibonacci(30)) # 输出: 832040
三、性能优化
Python 3.9 在内部实现上做了多处优化,提高了性能:
✅ **更快的 range()
、zip()
、map()
等内置函数。
✅ JSON
解析速度提升。
✅ PEP 593
引入 Annotated
类型提示,增强了类型提示的表达能力。
四、其他重要更新
1. 移除废弃的模块和功能
- 移除
parser
模块 collections.OrderedDict
在 Python 3.9 起性能提升,不再依赖C
扩展
2. 安全性提升
- 强化了
hash()
实现,避免潜在的哈希碰撞攻击 - 增强了
SSL
模块的安全性
五、升级 Python 3.9 的注意事项
在升级至 Python 3.9 时,请注意以下兼容性变化:
✅ 某些已废弃的模块(如 parser
)已被移除
✅ 使用 importlib
替代 imp
(已废弃)
✅ http.client
、urllib
等模块的默认超时更改
六、总结
字典合并运算符 | 使用 ` |
类型提示增强 | 使用
等简化语法 |
字符串处理优化 |
/
|
时区支持 | 新增
模块,内置 IANA 时区库 |
数学函数增强 |
、
增强 |
模块增强 |
生成随机字节流 |
模块 | 新增
找出多众数 |
| 高效的缓存机制,简化递归函数性能优化 |
性能提升 | JSON 解析更快、
性能提升 |
安全性提升 |
加强防御,SSL 改进 |
Python 3.9 带来了更优雅的语法和更强大的功能,推荐升级并利用这些新特性来提高开发效率。
《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart