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
查看4道真题和解析