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)-思维导图】 课本里章节里所有蓝色字体的思维导图...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
机器学习复习3--模型评估
误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异称为:误差(error)。 误差定义: ①在训练集上的误差称为训练误差(training error)或经验误差(empirical error&#x…...
Web APIS Day01
1.声明变量const优先 那为什么一开始前面就不能用const呢,接下来看几个例子: 下面这张为什么可以用const呢?因为复杂数据的引用地址没变,数组还是数组,只是添加了个元素,本质没变,所以可以用con…...
