Python 3.10 引入的新特性

Python 3.10 引入了许多令人瞩目的新特性,特别是结构模式匹配(Structural Pattern Matching)、类型提示增强错误消息改进等,显著提升了开发体验。以下是 Python 3.10 的核心新特性详解:

一、语法增强

1. 结构模式匹配(Structural Pattern Matching)—— match / case

Python 3.10 最大的特性之一,类似于 switch 语法,但更强大,支持解构、类匹配、守卫等高级模式匹配。

基本语法

def http_status(status):
    match status:
        case 200:
            return "OK"
        case 400:
            return "Bad Request"
        case 401 | 403 | 404:
            return "Unauthorized or Not Found"
        case _:
            return "Unknown Status"

print(http_status(200))  # 输出: OK
print(http_status(404))  # 输出: Unauthorized or Not Found
print(http_status(500))  # 输出: Unknown Status

2. case 关键字中的模式匹配

  • 字典模式匹配
def handle_data(data):
    match data:
        case {"type": "error", "message": msg}:
            print(f"Error: {msg}")
        case {"type": "success", "data": content}:
            print(f"Success: {content}")
        case _:
            print("Unknown data format")

handle_data({"type": "error", "message": "404 Not Found"})
# 输出: Error: 404 Not Found

  • 类模式匹配
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

def check_point(p):
    match p:
        case Point(x=0, y=0):
            print("Origin")
        case Point(x=0, y=y):
            print(f"Y-axis at {y}")
        case Point(x=x, y=0):
            print(f"X-axis at {x}")
        case Point(x, y):
            print(f"Point at ({x}, {y})")

check_point(Point(0, 0))   # 输出: Origin
check_point(Point(5, 0))   # 输出: X-axis at 5

3. case 中的守卫条件(if

case 语法支持 if 条件守卫,进一步增强了匹配的灵活性。

def check_number(x):
    match x:
        case n if n > 0:
            print("Positive number")
        case n if n < 0:
            print("Negative number")
        case _:
            print("Zero or unknown type")

check_number(10)   # 输出: Positive number
check_number(-5)   # 输出: Negative number
check_number(0)    # 输出: Zero or unknown type

二、类型提示增强

1. | 作为联合类型(Union Types)

Python 3.10 引入了更简洁的联合类型语法,替代 typing.Union

示例:

# Python 3.9 及以下
from typing import Union

def square(num: Union[int, float]) -> Union[int, float]:
    return num ** 2

# Python 3.10+
def square(num: int | float) -> int | float:
    return num ** 2

✅ 语法更简洁直观

✅ 更符合 Python 代码风格

2. TypeGuard 类型保护

TypeGuard 用于为类型检查器提供更精准的类型推断,特别适用于 isinstance() 判断的更复杂场景。

示例:

from typing import TypeGuard

def is_str_list(val: list[object]) -> TypeGuard[list[str]]:
    return all(isinstance(item, str) for item in val)

data = ["apple", "banana"]
if is_str_list(data):
    # data 的类型自动推断为 list[str]
    print(", ".join(data))  # 输出: apple, banana

3. Parameter Specification Variables (typing.ParamSpec)

解决泛型函数参数类型标注问题,特别适用于装饰器等场景。

示例:

from typing import Callable, ParamSpec

P = ParamSpec("P")

def log_function(func: Callable[P, None]) -> Callable[P, None]:
    def wrapper(*args: P.args, **kwargs: P.kwargs) -> None:
        print(f"Calling {func.__name__} with {args} {kwargs}")
        return func(*args, **kwargs)
    return wrapper

@log_function
def greet(name: str) -> None:
    print(f"Hello, {name}")

greet("Alice")  # 输出: Calling greet with ('Alice',) {}

三、错误消息的优化

Python 3.10 提供了更清晰、更直观的错误提示,极大提升了调试效率。

示例:

def add(x, y):
    return x + y

print(add(5, 3))   # 正常运行
print(add(5))      # Python 3.10 报错更直观

Python 3.9 报错:

TypeError: add() missing 1 required positional argument: 'y'

Python 3.10 报错:

TypeError: add() missing 1 required positional argument: 'y'

✅ 错误信息中缺失参数问题代码行更加直观,便于快速定位问题。

四、性能优化

Python 3.10 在内部机制上进一步优化,提升了多项性能:

更快的 Python 解释器启动速度

优化了 str.replace()str.find() 等方法

f-strings 速度提升

五、标准库增强

1. zip() 新增 strict 参数

strict=True 模式要求所有可迭代对象长度一致,否则引发错误,避免意外数据丢失。

示例:

a = [1, 2, 3]
b = ['a', 'b']

# Python 3.10+
print(list(zip(a, b, strict=True)))  # 报错:ValueError

2. itertools.pairwise() 新增

pairwise() 返回连续的元素对,常用于滑动窗口场景。

示例:

from itertools import pairwise

data = [1, 2, 3, 4]
print(list(pairwise(data)))  # 输出: [(1, 2), (2, 3), (3, 4)]

六、其他重要更新

open() 支持 encoding="utf-8" 默认编码

asyncio 模块优化,新增 asyncio.TaskGroup

distutils 模块已废弃,推荐使用 setuptools 代替

七、总结

结构模式匹配

更强大的

match

/

case

语法

联合类型

`

TypeGuard

更精准的类型保护,提升类型检查器推断能力

ParamSpec

泛型函数参数类型标注,特别适用于装饰器

zip(strict=True)

避免迭代器长度不一致导致的潜在数据丢失

itertools.pairwise()

提供滑动窗口效果,提高数据处理便捷性

更清晰的错误提示

错误消息更易理解,调试更高效

性能优化

提高

f-strings

str

方法等执行效率

Python 3.10 通过这些新特性显著提升了开发体验,推荐升级并应用这些新功能来优化代码。

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

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

全部评论

相关推荐

秋招企业推荐--TCL华星首先不管大家是否考研,都建议在秋招内签一份保底的工作,因为大部分企业秋招的名额比春招多很多,企业的质量也比春招好太多了,这时候签约大企业也会比较容易。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在说下投递过程&nbsp;:TCL分为Tcl华星和tcl实业,两个公司开起来投递机会只有两次,也就是假如你在华星投递了两个岗位后,就不能再投实业了,本次强烈推荐的是-TCL华星&nbsp;,在你投递岗位后会收到测评题,也就是行测。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测评题型拆解1、言语理解:约9题,考查文字逻辑与理解,比如段落核心意思、词语语境匹配,今年这9题都是判断对错,有三个选项&nbsp;2、资料分析:大概10题,给数据图表进行计算,像问这个公司股价多少、哪项是错的等,练出快速抓取关键信息的本事很关键&nbsp;3、图形推理:9题左右,寻找图形规律,比如元素数量增减、位置移动等,多做题能掌握常见规律&nbsp;4、性格测评:题量不少,不限制时间按照真实想法选择即可,前后回答保持一致更靠谱8时间小贴士:投完简历后1-3天会收到测评邀请,通常要求3天内完成,别错过时间呀~TCL也是世界500强,待遇给的很不错,主要是相较于其他的大厂,华星比较轻松,所以我还是比较推荐tcl华星的,秋招也比较容易进。[爆炸R]待遇:13薪,六险一金[玫瑰R]双休,8小时工作制[气球R]一般都不加班,个人感觉还是很轻松的。[烟花R][烟花R]宿舍双人间,大概和图2差不多,有空调,冰箱,电视机,有阳台,一人一个大衣柜,四五十平空间很大。最满意的就是华星的宿舍,住着很舒适。第一年还免房租。[星R]岗位:土木,机械,电气,法务,供应链,物流等等很多岗位,校招官网查看。[爆炸R]面试相关:面试一般只有10分钟,hr最多就只能问两三个问题,根据你简历上写的提问,一般正常介绍一下就好。[烟花R][星R][烟花R]内推码:wzpxcm&nbsp;&nbsp;&nbsp;可以直接保存图3扫描[爆炸R]投递:tcl校招,有内推码可以更快审核
投递TCL等公司10个岗位
点赞 评论 收藏
分享
#&nbsp;影石——多媒体开发工程师一面(2025.7.31)##&nbsp;自我介绍(5min)##&nbsp;面试官提问环节(40min)本硕专业都是机械?为什么转码,有学过计算机相关的专业课吗?看到你说了多线程编程,你项目中有用到多线程吗?你在项目里如何确保线程同步?有遇到死锁吗,介绍一下死锁的概念和原因?对设计模式有了解吗?那么如果有这么一个场景,设计一个解码器接口,可以解码不同格式的视频流,应该采用什么设计模式说几个常用的流媒体协议(答:rtsp、rtmp、hls、webRTC)你项目中输入的是rtsp视频流、视频处理后输出的是rtmp视频流,为什么输出不也用rtsp流,这两个流协议有什么区别?介绍一下rtsp协议。(我只了解过他们具体的常用场景,底层实现有些忘了,记得rtsp下面的传输层可以选择UDP/TCP)介绍TCP和UDP?(UDP只管发不管收,不可靠,快速,头部信息短8位;TCP面向连接、可靠,有三次握手四次挥手,通过应答机制、滑动窗口、拥塞控制来保证可靠性,头部信息长20位)那TCP和UDP头部都有哪些字段?(UDP:端口、校验位,TCP:除了端口和校验位,还要序列号、滑动窗口等字段来实现它前面提到的一些机制)如果视频流不是来自海康摄像头,在手机设备上是来自身相机的视频,如何获取?(没了解过,说可能手机采取不同的流协议吧,但也存在不需要编解码,可能直接内部传输原始帧,因为不需要考虑网络带宽压力的问题)介绍一下你知道的编解码格式(h264、h265)那介绍一下h264、h265(从压缩率、普及率、算法复杂度、硬件支持率上简单对比,不了解具体编码协议)为什么编码后要封装,可以直接传吗?(乱答的,需要容器,封装格式就是容器,封装后才能以具体的视频流协议传输)你了解的封装格式有哪些?(MP4、flv)视频流丢包或者丢帧会造成什么影响?对于丢包,你如何处理的?了解过GOP(没反应过来,面试官进一步解释,听说过I帧吗?想起来了就是关键帧和预测帧哪些)你在项目中设置的GOP是多少?(记不起来)设置依据是什么?(参数直接参考别人的,不了解这一部分,反问面试官:您能给我介绍一下这里边的设计依据是什么吗,我之前确实没详细了解过这个点?,面试官人很好,给我展开说明了一下。)设置编码器参数有哪些,分别是什么含义,对视频有什么影响?计算机中的32位和64位是什么意思?32位计算机,4g内存,可以访问超过4g的内存吗。如何实现?(可以,操作系统虚拟内存实现,不常用内存置换到外存(磁盘))##&nbsp;反问环节(5min)最后简单反问了几个问题,部门业务?工作强度?技术栈?入职培训之类的?结束。#&nbsp;影石——多媒体开发工程师二面(2025.8.7)##&nbsp;自我介绍(5min)##&nbsp;面试官提问环节(30min)项目问的很细,共享屏幕,面试官让你写自己的项目软件框架,一点一点给他介绍。。。八股(15min)进程和线程?两个进程有相同的虚拟地址指针,他们访问的是同一块内存吗?如果换成两个线程呢?了解生产者消费者模式吗?在编辑器里写一下伪代码实现?出了锁和条件变量,还要哪些方式实现线程同步?当时面完没整理,有些问题记不起来了。。。##&nbsp;反问环节(5min)具体业务?二面后还要几轮?(过了就是hr面)如何看待大疆发布360相机?(全景相机以前是影石一家独大,有竞争是好事,说明这个领域未来有比较大的市场...)自我感觉面得还行,但是二面挂了
一金Chen:请问二面后多久出的结果?
查看27道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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