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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务