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 之前,类型提示需使用 ListDict 等来自 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)}

listdicttupleset 等原生类型可直接用于类型提示,语法更直观。

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.clienturllib 等模块的默认超时更改

六、总结

字典合并运算符

使用 `

类型提示增强

使用

list[int]

等简化语法

字符串处理优化

removeprefix()

/

removesuffix()

时区支持

新增

zoneinfo

模块,内置 IANA 时区库

数学函数增强

math.lcm()

math.gcd()

增强

random

模块增强

randbytes()

生成随机字节流

statistics

模块

新增

multimode()

找出多众数

functools.cache

高效的缓存机制,简化递归函数性能优化

性能提升

JSON 解析更快、

range()

性能提升

安全性提升

hash()

加强防御,SSL 改进

Python 3.9 带来了更优雅的语法和更强大的功能,推荐升级并利用这些新特性来提高开发效率。

进阶高级测试工程师 文章被收录于专栏

《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart

全部评论

相关推荐

感觉他们一点都不了解现在这个社会就业有多难,已经在牛客刷到好多篇&nbsp;延毕的帖子了,延毕就会导致已经找好的工作就没了,还得重新再找,学校和老师们是怎么想的呢????看到学生丢失工作会开心吗&nbsp;就业数据都在造假,真实的就业困难不去解决&nbsp;一个个真是好样的
从明天开始狠狠卷JV...:学生看到的是导师不放实习导致offer黄了。 导师看到的是招进来的学生吃自己补助和自己的招生名额,却没给自己升迁带来任何帮助,还要跑路。 根本利益的不一致,最主要留校的导师大概率是职场上招聘失败的,被迫留校的,什么牛鬼蛇神都会有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务