Python3.10的一些新特性与使用场景
Python 3.10的新特性不仅增强了语言的功能性,也提供了更丰富的工具,让开发者能更高效、更准确地编写代码。接下来将通过一些实际的使用场景和方法来探索这些新特性。
1. “精确类型”参数化内置集合
Python 3.10引入了更精确的方式来指定内置集合的类型。在以前的版本中,我们只能大致地指明一个列表或字典等容器的类型,例如:
def process_numbers(numbers: list):...
在这个例子中,我们不知道 numbers
列表中应该包含哪种类型的元素。Python 3.10 允许我们更精确地定义这些类型,如下所示:
def process_numbers(numbers: list[int]):...
在这里,我们明确指出 numbers
应该是一个整数列表。这使得类型检查更加严格和准确,有助于避免类型相关的错误。
场景: 在构建一个数据处理库时,你可能需要处理不同类型的数据集。使用精确类型参数化,你可以确保函数接收正确类型的数据集。
示例:
def average(numbers: list[int]) -> float:return sum(numbers) / len(numbers)# 正确使用
print(average([1, 2, 3]))# 错误使用(类型检查器将捕获此错误)
print(average(["a", "b", "c"]))
优势: 这种方法减少了运行时错误的可能性,因为类型错误现在可以在代码编写阶段被发现。
2. 父类类型参数化
这是一个面向对象编程的改进,它允许更精确地控制继承。在Python 3.10之前,如果你有一个泛型父类,你不能在子类中指定父类的类型参数。但是现在,你可以这样做。例如:
from typing import Generic, TypeVarT = TypeVar('T')class Parent(Generic[T]):passclass Child(Parent[int]): # 明确指定继承了一个整数类型的 Parentpass
这使得你能够创建更严格定义的类层次结构。
场景: 设计一个多层次的类结构,比如在构建一个通用的数据处理框架时,你可能希望明确子类应该如何扩展基类。
示例:
from typing import Generic, TypeVarT = TypeVar('T')class Processor(Generic[T]):def process(self, data: T) -> T:# 基本处理...class StringProcessor(Processor[str]):def process(self, data: str) -> str:# 针对字符串的特殊处理...str_processor = StringProcessor()
print(str_processor.process("Hello World"))
优势: 这提高了代码的可读性和可维护性,同时确保了类型安全。
3. 更好的错误消息
Python 3.10提高了错误消息的质量,使它们更具描述性和有助于调试。例如,在早期版本中,如果你尝试对非迭代对象进行迭代,你可能会得到一个相对模糊的错误消息。在Python 3.10中,错误消息将更具体,可能会告诉你是哪个对象无法迭代,这有助于快速定位问题。
场景: 对非迭代对象进行迭代
示例:
假设我们有以下代码片段,它试图对一个非迭代对象进行迭代:
# 假设我们有一个非迭代对象
non_iterable = 42# 尝试对其进行迭代
for item in non_iterable:print(item)
在Python 3.10之前的错误消息:
运行上述代码在Python 3.7或3.8等早期版本中,你可能会得到类似以下的错误消息:
TypeError: 'int' object is not iterable
这个错误消息虽然指出了类型错误,但没有指明具体是哪个对象或变量导致了错误。
在Python 3.10中的错误消息:
相同的代码在Python 3.10中运行,将提供更具体的错误消息:
TypeError: 'int' object is not iterable. The error occurred in 'non_iterable'
在这个改进后的错误消息中,Python不仅告诉你出现了什么类型的错误,还明确指出了是哪个具体的对象(在这个例子中是 non_iterable
)导致了问题。
优势: 这种改进对于调试和快速解决问题非常有用,特别是在处理复杂代码或多个可能的错误源时。更具体和描述性的错误消息可以大大减少定位问题所需的时间,这对于所有水平的Python开发者来说都是一个显著的优势。
4. 新的语法特性:类型联合
Python 3.10引入了一个新的语法特性,允许在函数参数中使用“|”来表示类型联合。这意味着你可以指定一个参数可以是多种类型中的一种。例如:
def process_data(data: int | str):...
在这个例子中,data
可以是 int
或 str
类型。这使得函数定义更加灵活,减少了需要写额外的类型检查代码。
场景: 在开发API时,你可能需要一个函数能够接受多种类型的参数。
示例:
def parse_input(input_data: int | str):if isinstance(input_data, str):return process_string(input_data)return process_int(input_data)# 可以接受字符串或整数
parse_input("some data")
parse_input(123)
优势: 这种方法使函数更加灵活,同时保持了类型安全。
Python 3.10的这些新特性不仅提高了编程的效率和准确性,还使代码更加清晰和易于维护。
相关文章:
Python3.10的一些新特性与使用场景
Python 3.10的新特性不仅增强了语言的功能性,也提供了更丰富的工具,让开发者能更高效、更准确地编写代码。接下来将通过一些实际的使用场景和方法来探索这些新特性。 1. “精确类型”参数化内置集合 Python 3.10引入了更精确的方式来指定内置集合的类型…...

VS2022 配置 OpenCV并开始第一个程序
VS2022安装 首先下载 VisualStudioSetup.exe 下载连接:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 点击上面的链接即可进入到下载页面。进入到下载页面,可看到有几个版本可选,如下: 我选择的是企业版:E…...

图像处理01 小波变换
一.为什么需要离散小波变换 连续小波分解,通过改变分析窗口大小,在时域上移动窗口和基信号相乘,最后在全时域上整合。通过离散化连续小波分解可以得到伪离散小波分解, 这种离散化带有大量冗余信息且计算成本较高。 小波变换的公…...

构建自定义ChatGPT,微软推出Copilot Studio
11月16日,微软在美国西雅图举办“Microsoft Ignite 2023”全球开发者大会。本次人工智能成为重要主题,微软几乎把所有产品都集成了生成式AI功能并发布了一系列全新产品。 其中,微软重磅推出了Copilot Studio(预览版)&…...

什么是Mock?为什么要使用Mock呢?
1、前言 在日常开发过程中,大家经常都会遇到:新需求来了,但是需要跟第三方接口来对接,第三方服务还没好,我们自己的功能设计如何继续呢?这里,给大家推荐一下Mock方案。 2、场景示例 2.1、场景一…...

elementui表格自定义指令控制显示哪些列可以拖动
Vue.directive(tableBorder, function (el, {value}) {// value允许传字符串数字和数组el.classList.add(z_table_hasBorder)let hasStyle el.querySelector(style)if(hasStyle){hasStyle.remove()}let style document.createElement(style)let str .z_table_hasBorder .el…...

Motion Plan之搜素算法笔记
背景: 16-18年做过一阵子无人驾驶,那时候痴迷于移动规划;然而当时可学习的资料非常少,网上的论文也不算太多。基本就是Darpa的几十篇无人越野几次比赛的文章,基本没有成系统的文章和代码讲解实现。所以对移动规划的认…...
新中新身份证阅读器驱动下载sdk DKQ-A16D
读取操作 int nRet;string sMsg "";IDCardData idcardData new IDCardData();byte[] ctmp new byte[255];ReadCardAPI.Syn_SetPhotoPath(1, ref ctmp);setupDataFormate(1);nRet ReadCardAPI.Syn_OpenPort(Main_Form.m_iPort);if (nRet 0){DateTime startTime …...

世界坐标系,相机坐标系,像素坐标系转换 详细说明(附代码)
几个坐标系介绍,相机内外参的回顾参考此文。 本文主要说明如何在几个坐标系之间转换。 本文涉及: 使用相机内参 在 像素坐标系 和 相机坐标系 之间转换。使用相机外参(位姿)在相机坐标系 和 世界坐标系 之间转换。(qw,qx,qy,qz,…...

计算机毕业设计 基于SpringBoot的企业内部网络管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
CISP模拟试题(三)
免责声明 文章仅做经验分享用途,利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 1. 人们对信息安全的认识从信息技术安全发展到信息安全保障,主要是由于: A.为了更好地完成组…...

前端调取摄像头并实现拍照功能
前言 最近接到的一个需求十分有意思,设计整体实现了前端仿 微信扫一扫 的功能。整理了一下思路,做一个分享。 tips: 如果想要实现完整扫一扫的功能,你需要掌握一些前置知识,这次我们先讲如何实现拍照并且保存的功能。 一. wind…...
android —— 阴影效果和跑马灯效果Textview
1、带阴影的TextView ①、 android:shadowColor“color/black” 设置阴影颜色,需要与shadowRadius一起使用 ②、android:shadowRadius“3.0” 设置阴影模糊程度,设为0.1会变成字体颜色,建议设置3.0 ③、android:shadowDx“10” 设置阴影在水…...

多态语法详解
多态语法详解 一:概念1:多态实现条件 二:重写:三:向上转型和向下转型1:向上转型:1:直接赋值:2:方法传参3:返回值 2:向下转型 一:概念 1:同一个引…...

Python大数据之linux学习总结——day11_ZooKeeper
ZooKeeper ZK概述 ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper结构: 采用树形层次结构,ZooKeeper树中的每个节点被称为—Znode。且树…...

C语言——函数的嵌套调用
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void new_line() {printf("Hello\n"); }void three_line() {int i0;for(i0;i<3;i){new_line();} }int main() {three_line();return 0; }...

4种经典的限流算法与集群限流
0、基础知识 1000毫秒内,允许2个请求,其他请求全部拒绝。 不拒绝就可能往db打请求,把db干爆~ interval 1000 rate 2; 一、固定窗口限流 固定窗口限流算法(Fixed Window Rate Limiting Algorithm)是…...

网工内推 | 国企、港企网工,年底双薪,NA以上认证即可
01 中航期货有限公司 招聘岗位:信息技术部-网络工程师 职责描述: 1、负责总部、分支机构、外联单位网络的日常运维、故障和应急处置,特别是定期监测设备的运行状态,对存在隐患的地方及时发现改正,保持网络稳定通畅&am…...

【华为HCIP | 华为数通工程师】刷题日记1116(一个字惨)
个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…...

软考-高级-系统架构设计师教程(清华第2版)【第7章 系统架构设计基础知识(263~285)-思维导图】
软考-高级-系统架构设计师教程(清华第2版)【第7章 系统架构设计基础知识(263~285)-思维导图】 课本里章节里所有蓝色字体的思维导图...

迈向分布式智能:解析MCP到A2A的通信范式迁移
智能体与外部世界的桥梁之言: 在深入探讨智能体之间的协作机制之前,我们有必要先厘清一个更基础的问题:**单个智能体如何与外部世界建立连接?** 这就引出了我们此前介绍过的 **MCP(Model Context Protocol&…...
深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制
导言 在面向对象编程中,理解对象构造过程至关重要。C#的构造函数执行遵循严格的顺序规则,尤其是涉及继承和成员初始化时。本文将深入解析构造函数的执行流程、初始化语句的妙用以及类访问修饰符的影响,助你写出更健壮、可维护的代码。 构造…...
(面试)OkHttp实现原理
OkHttp 是一个高效的 HTTP 客户端,被广泛应用于 Android 和 Java 应用中。它提供了许多强大的特性,例如连接池、透明的 GZIP 压缩、HTTP/2 支持等。理解 OkHttp 的实现原理有助于更好地使用和调试它。 以下是 OkHttp 的一些核心实现原理: 1…...

【JavaWeb】Maven、Servlet、cookie/session
目录 5. Maven6. Servlet6.1 Servlet 简介6.2 HelloServlet6.3 Servlet原理6.4 Mapping( **<font style"color:rgb(44, 44, 54);">映射 ** )问题6.5 ServletContext6.6 HttpServletResponse<font style"color:rgb(232, 62, 140);background-color:rgb(…...
架构师面试题整理
以下是从提供的HTML代码中提取的所有class"title-txt"的文本内容,已排除重复项并按顺序整理: 缓存专题 实战解决大规模缓存击穿导致线上数据库压力暴增面试常问的缓存穿透是怎么回事基于DCL机制解决突发性热点缓存并发重建问题实战Redis分布…...
NodeJS全栈WEB3面试题——P7工具链 测试
📊 7.1 Truffle vs Hardhat:各自的优势? 项目TruffleHardhat📦 成熟度老牌框架,社区大,文档全面新一代框架,现代化设计🧪 测试支持内置 Mocha 测试框架支持 Mocha Chai,…...

MYSQL MGR高可用
1,MYSQL MGR高可用是什么 简单来说,MySQL MGR 的核心目标就是:确保数据库服务在部分节点(服务器)发生故障时,整个数据库集群依然能够继续提供读写服务,最大限度地减少停机时间。 2. 核心优势 v…...
针对 Harmony-Cordova 性能优化,涵盖原生插件开发、线程管理和资源加载等关键场景
1. 原生图片处理插件(Java) package com.example.plugin; import ohos.media.image.ImageSource; import ohos.media.image.PixelMap; import ohos.app.Context; public class ImageProcessor { private final Context context; public ImagePro…...

保持本地 Git 项目副本与远程仓库完全同步
核心目标: 保持本地 Git 项目副本与 GitHub 远程仓库完全同步。 关键方法: 定期执行 git pull 命令。 操作步骤: 进入项目目录: 在终端/命令行中,使用 cd 命令切换到你的项目文件夹。执行拉取命令: 运行…...

高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”
一、高密爆炸:一声巨响,撕开化工安全“伤疤” 2025年5月27日,山东高密友道化学有限公司的车间爆炸声,像一把利刃划破了化工行业的平静。剧烈的冲击波将车间夷为平地,黑色蘑菇云腾空而起,刺鼻的化学气味弥漫…...