Python 3.13 中的 7 个新类型特性

ImportError: cannot import name ‘ParamSpec‘ from ‘typing_extensions‘ python-BaseException ImportError: cannot import name 'ParamSpec' from 'typing_extensions' python-BaseException 阅读详情

转自:数据STUDIO

👇我的小册 45章教程:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。

刚刚发布的 Python 3.13 继续挑战了效率和优雅的极限。

除了讨论已久的令人兴奋的自由线程模式 和 Just-In-Time 编译器之外,吸引我的还有类型系统的新改进。

在早期版本引入的强大类型系统基础上,Python 3.13 将引入七个新的类型特性,有望提高代码的可靠性和开发人员的工作效率。

在本文中,我们将尝试这些令人兴奋的新特性,并探索它们如何简化我们的代码并将我们的编程实践提升到新的高度。

本文中的所有代码片段都是在 Python 3.13.0rc2 的最新发布版本上测试的,该版本是 Python 3.13 的最终发布预览版。3.13.0 的正式版本于 2024 年 10 月 1 日星期二发布。

1. ReadOnly类型

将项目定义为只读

新的 ReadOnly 类型,顾名思义,是一种特殊的类型构造,用于将 TypedDict 中的项目标记为只读。

from typing import TypedDict, ReadOnly

class Leader(TypedDict):
    name: ReadOnly[str]
    age: int

author: Leader = {'name': 'Yang Zhou', 'age': 30}
author['age'] = 31  # no problem to change
author['name'] = 'Yang'  # Type check error: "name" is read-only

上面的代码展示了它的用法。由于我们将 name 属性定义为 ReadOnly[str]类型,因此更改其值将在集成开发环境或其他静态类型检查工具中调用类型不一致提示。

注意:“ReadOnly” 类型只能在 “TypedDict” 中使用。

如果你喜欢更简单的 TypedDict 定义方式,也可以使用 ReadOnly 类型:

from typing import TypedDict, ReadOnly

Leader = TypedDict("Leader", {"name": ReadOnly[str], "age": int})

author: Leader = {'name': 'Yang Zhou', 'age': 30}
author['age'] = 31  # no problem to change
author['name'] = 'Tim'  # Type check error: "name" is read-only

2. @warnings.deprecated

新的装饰器,用于指示对象已被弃用

好的软件会不断改进。这不仅意味着添加新内容,还意味着删除过时的内容。

然而,在下一个新版本中直接删除函数或类的做法对用户来说不够友好。我们不应该这样做。

如果您严格遵守 Python 的官方文档。你会发现 Python 逐步删除无用对象的策略才是行业标准:

  • 将相对的对象标记为废弃对象,提前告知开发者将来会删除哪些对象。但这些对象仍然可以在接下来的几个版本中使用。

  • 几个版本之后,完全知情的对象将从 Python 的最新版本中完全移除。

Python 3.13 为我们提供了一种更方便的方法来标记被废弃的对象 - 一个新的 decorator,名为 @warings.deprecated。

只要一个对象配备了这个装饰器,静态类型检查工具或集成开发环境就会提醒我们使用已废弃对象。

例如,我在下面的程序中使用了一个已废弃的对象,集成开发环境 (PyCharm) 会通过明显的删除线提醒我:

d2c22179b307819681105d1e88b3c887.png
A PyCharm screenshot to show how the deprecated decorator works

简单易用,意义非凡,这又是一个经典的 Pythonic 设计!

3. TypeIs

让类型缩小更容易

新的 “TypeIs” 概念旨在 “类型缩小”(type narrowing),其官方文档中描述“类型缩小”是静态类型检查器用来确定程序代码流中表达式的更精确类型的一种技术。

而我们的应用代码中使用它的几率并不高。但我们需要了解它是什么:

简而言之,形式 def foo(arg: TypeA) -> TypeIs[TypeB]: ...,意味着如果 foo(arg) 返回 True,则 arg 是 TypeB的实例,如果返回 False,则它不是 TypeB的实例。

4. is_protocol

快速检查类是否属于协议类型的新函数

这个新函数 is_protocol 是检查对象是否为 Protocol 类型的便捷方法。

我们只需从 typing 模块中导入该函数并直接使用即可:

from typing import is_protocol, Protocol


class PersonProto(Protocol):
    name: str
    age: int

print(is_protocol(PersonProto))
# True
print(is_protocol(int))
# False

5. get_protocol_members

返回协议成员集合函数

新的 get_protocol_members() 函数用于快速获取一个 Protocol 类型的所有项目名称。它返回一个包含所有名称的 frozenset:

from typing import Protocol, get_protocol_members


类 PersonProto(Protocol):
    name: str
    age: int

print(get_protocol_members(PersonProto))
# frozenset({'age', 'name'})

6. TypeVar、ParamSpec 和 TypeVarTuple 的默认类型

在 Python 3.13 中,类型参数 (typing.TypeVar、typing.ParamSpec 和 typing.TypeVarTuple 现在支持默认类型。其用法非常简单。

例如,下面的代码显示了如何轻松地将默认类型设置为 TypeVar:

from typing import TypeVar
T = TypeVar("T", default=int)  # This means that if no type is specified T is int
print(T.has_default())
# True
S = TypeVar("S")
print(S.has_default())
# False

Python 3.13 还添加了 has_default() 函数来检查 TypeVar 是否有缺省类型。

7. NoDefault

表示没有默认值

除了为一些新的类型参数提供默认支持外,typing 模块还提供了一个名为 NoDefault 的新对象,用于指示类型参数没有默认值。

from typing import TypeVar, NoDefault
T = TypeVar("T")
print(T.__default__ is NoDefault)
# True

S = TypeVar("S", default=None)
print(S.__default__ is NoDefault)
# False

正如上面的代码所证明的,如果没有类型被设置为默认值,那么 TypeVar 的 __default__ 属性将是 NoDefault。但如果它的默认值是 None,它仍然有默认值。

性能改进和方法删除

Python 3.13 官方文档中提到,通过移除对 re 和 contextlib 的依赖,typing 模块的导入时间减少了大约三分之一。

我们还需要注意的是,从这个新 Python 版本开始,一些与键入相关的东西将被移除:

删除 typing.io 和 typing.re 命名空间,它们自 Python 3.8 起已被弃用。这些命名空间中的项可以直接从 typing 模块导入。

删除创建 TypedDict 类型的关键字参数方法,该方法在 Python 3.11 中已被弃用。

4793563a3e4d5ea47f09fe275182232f.jpeg

最后推荐一下我们团队写的量化小册的内容,45篇内容!从Python安装,入门,数据分析,爬取股票基金的历史+实时数据,以及如何写一个简单量化策略,策略回测,如何看资金曲线统统都有介绍!非常超值!

欢迎订阅:原价299 早鸟价2杯咖啡钱,即可永久阅读。满500人又要涨价了,现在的价格非常非常低,只要2杯奶茶,就可以终身订阅+课程源码,还有永久陪伴群。48小时无理由退款,放心食用!

7c268178b22deb986b731c814f94b858.png

往期推荐
量化: 如何用Python爬取创业板历史+实时股票数据!|实战股票分析篇利用Pandas 9招挖掘五粮液股价!|实战股票数据分析篇 Pandas滚动操作 |量化股票第一步,用Python画股票K线,双均线图,可视化你的股票数据!|如何用Python爬取全部800多只ETF基金数据!|如何用Python写一个双均线策略 |如何用Python开发一个多策略机器人!上篇!|Python量化系列-用布林策略买五粮液能赚多少钱?|只要4秒钟!用Python 获取上证指数34年的历史日线数据!

 
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁

Python 2.7.13 Windows安装体验包 在安装Python时添加到PATH变量的路径,可以通过系统属性进行进一步编辑。例如,添加额外的库目录到Scripts文件夹,以便更方便地使用pip安装的工具。有多种自动化迁移工具可以帮助开发者转换代码,比如2to3和Modernize。这些工具可以帮助自动化转换代码的过程,但对于复杂的代码库,仍需人工干预。 阅读详情

相关推荐

python-3.12.8.exe

python-3.12.8.exe

十一、Python 3.13 的新特性和更新内容

更好的异步上下文管理:支持异步资源管理改进的任务管理:更灵活的任务创建和等待异步迭代器:支持异步数据流处理性能显著提升:启动速度和执行效率都有改善语法更加简洁:类型注解和字符串格式化更加方便标准库增强:更多实用功能和改进开发体验优化:更好的错误信息和调试支持安全性提升:修复安全漏洞,增强代码安全性如果你需要了解某个具体特性的详细用法,或者有特定的应用场景,请告诉我!

weixin_46190208的博客 1966

python3.12.8软件包

python3.12.8软件包,方便下载

安装Python解析器(以Python-3.12.8为例)

1、作用:把Python代码转换成计算机底层可以识别的二进制机器语言2、特性(1)每次运行都要转换成字节码,然后再由虚拟机把字节码转换成机器语言,最后才能在硬件上运行。但与编译性语言(例如,C和C++语言)相比,每次多了编译和链接过程,性能肯定会受到影响。(2)由于不用关心程序编译和库链接等问题,开发工作也就更加轻松。(3)Python程序更易于移植,基本上无需改动就能在多平台上运行。

m0_65065082的博客 1978

python-3.12.8-arm64.exe

python-3.12.8-arm64.exe

Abaqus中Cohesive单元建模:从本构到失效的完整指南

本文提供了Abaqus中Cohesive单元建模的完整指南,涵盖从本构模型到失效分析的全过程。详细解析了Cohesive单元作为模拟界面粘结与失效的关键工具,其核心在于弹性本构、损伤起始准则和损伤演化定律的设置。文章通过双悬臂梁(DCB)实例,手把手指导前处理、材料定义、求解设置及后处理分析,并分享了刚度、强度、断裂能等关键参数的影响与收敛性调优的实用避坑技巧,帮助用户准确模拟复合材料及胶接结构的界面失效行为。

cuda7parallel的博客 700

【Python】Python 3.13 中的 7 个新类型特性

刚刚发布的 Python 3.13 继续挑战了效率和优雅的极限。除了讨论已久的令人兴奋的自由线程模式 和 Just-In-Time 编译器之外,吸引我的还有类型系统的新改进。在早期版本引入的强大类型系统基础上,Python 3.13 将引入七个新的类型特性,有望提高代码的可靠性和开发人员的工作效率。在本文中,我们将尝试这些令人兴奋的新特性,并探索它们如何简化我们的代码并将我们的编程实践提升到新的高...

fengdu78的博客 566

LVDS系列23:Xilinx Ultrascale系ISERDESE3原语(一)

当FIFO_RD_CLK与CLKDIV对齐时,也就是Latency With Late FIFO Empty情况时,延迟比前一种情况长一个FIFO_RD_CLK时钟周期,也就是在FIFO_RD_CLK上升沿后一点,CLKDIV才成功驱动完FIFO_EMPTY的变化,于是读侧要得到FIFO_EMPTY为0的情况则要等到下一个FIFO_RD_CLK的上升沿采集时;IS_CLK_INVERTED、IS_CLK_B_INVERTED设置CLK和CLK_B是否反转,一般情况下设置0;

weixin_38828382的博客 900

Python13的最新特性

(简称 Wasm)是一种低级字节码格式,旨在为 Web 提供高性能的执行环境。它最初是为浏览器设计的,但现在已经被广泛应用于服务器端、嵌入式系统和其他非浏览器环境中。

全世界的博客 2306

彩虹期权定价

彩虹期权的定价较为复杂,因为它涉及多个标的资产的联合分布。蒙特卡洛模拟(Monte Carlo Simulation):通过模拟多个标的资产价格路径,计算期权的预期支付。解析近似方法:如马尔可夫链近似方法或多变量Black-Scholes公式的扩展。数值方法:如有限差分法或傅里叶变换法,适用于某些特定条件下的多资产期权定价。由于彩虹期权涉及多个标的资产,我们通常使用蒙特卡洛模拟来进行定价。接下来,我将演示如何使用Heston模型和蒙特卡洛模拟方法来定价彩虹期权。

智能科技前沿 1858

同济大学C++mooc第五、六讲参考答案

同济大学C++moooc第5、6讲 第五讲 第一题 随机产生10个30~100(包括30,100)的正整数,求它们的最大值、最小值、平均值,并显示整个数组的值和结果。 代码片. // #include<iostream> const int n = 10; using namespace std; int main() { int s[n],i,j,t,sum=0; for (i = 0; i < n; i++)

cjzui6666的博客 1万+

13 个 python3 才能用的特性

分享来源13 个 python3 才能用的特性 python3 于 2008 年发布,从最初的大割裂到现在,绝大多数的开源库已经使用 python3 来编写,并且已经迭代了五个大版本,最新的 python3.7 计划于 2018 年 6 月 15 发布正式版。而 python2.7 作为 python2 的最后一个版本,将于 2020 年 1 月停止维护。 更多Python视频、源码、资料加群...

python学习者的博客 2243

2022 七校联合NewStarCTF 公开赛赛道 WEEK5|MISC

2022 七校联合NewStarCTF 公开赛赛道 WEEK5|MISC

zerorzeror的博客 3118

Python 3.13 新特性与更新详解

文章目录Python 3.13 于 2024 年 10 月 7 日发布,带来了语言、实现和标准库方面的诸多改进。本文将重点介绍 Python 3.13 中的。

全球首个被优快云气死的程序员:阿小信 2001

RISC-V内核移植实战:从零开始手把手实现RT-Thread上下文切换(附GD32VF103代码解析)

本文详细解析了在RISC-V架构上移植RT-Thread实时操作系统的核心步骤,重点聚焦于上下文切换机制的实现。通过对比ARM Cortex-M与RISC-V在中断处理和寄存器管理上的关键差异,并以GD32VF103开发板为例,手把手指导开发者完成libcpu抽象层适配、线程栈初始化以及三种上下文切换方式的代码编写与调试,为嵌入式开发者从ARM转向RISC-V平台提供了实战指南。

fern8的博客 739

基于YOLOv10的微小目标检测,多头检测器提升小目标检测精度

引入多头检测器助力YOLOv10,暴力提升小目标检测性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2569

python3.13无GIL自由线程新特性

python3.13的自由线程开启python真并发编程新时代

yqq1997的博客 1682

激光雷达与相机外参标定(附open3d python代码)

现在的激光雷达与相机的标定程序基本都是Ubuntu框架下面的,并且都是C++代码,需要安装的依赖也比较复杂,于是自己写了一个python版本的标定程序,依赖非常简单,Windows系统也可以运行。我这里用的大疆的雷达,点比较密集,更容易用我这种方法标定,旋转的16,32线的雷达也可以用这种方法标定,只是标定点会相对难选取一些。2 手动在点云上选取N个标定点(每个点都对应图像上的点,顺序也要一致)3 通过PNP方法计算出二者的旋转投影矩阵,也就是外参矩阵。1 手动在图像上面选取N个标定点。

三维点云技术探索 3412

掌握Python 3.13的3个关键类型特性,让你的代码零容错

掌握Python 3.13类型提示增强,显著提升代码可靠性与可维护性。本文详解参数规范、联合类型简化和静态检查优化三大特性,适用于大型项目开发与团队协作,减少运行时错误。零容错编码实践值得收藏。

FastSolve的博客 694

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python 3.13 有什么新变化

Python 3.13 beta 是 Python 编译语言下一正式版本的预发布版本,包含多项针对语言、实现和标准库的改变。针对实现的最大改变包括新的交互式解释器,以及对于去除全局解释器锁 (PEP 703) 和启用即时编译器 (PEP 744) 的实验性支持。针对标准库的改变包括移除已弃用的 API 和模块,以及用户友好度和正确性方面的常规改进。

长门有希的博客 2268

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python 从 3.5 到最新版 3.13 的核心特性演进

【代码】Python 从 3.5 到最新版 3.13 的核心特性演进。

m0_37989702的博客 1055

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Python 3.13】新特性解读,重大改进建议升级:JIT编译、免GIL,REPL、错误处理、类型系统等多个方面

Python 3.13带来了许多令人兴奋的新特性和改进,涵盖了REPL、错误处理、并发、性能、类型系统等多个方面。虽然并非所有特性都立竿见影,但它为Python未来的发展指明了方向,也为开发者提供了更强大的工具和更流畅的开发体验。鼓励大家积极尝试Python 3.13,体验其带来的效率飞跃和体验焕新!

Creedassin的博客 3494

从入门到精通,全面解读Python 3.13类型提示增强功能

掌握Python 3.13类型提示增强,提升代码可读性与维护效率。详解新特性如泛型简化、类型推断优化及其在函数、类中的实际应用,助力开发者构建更安全的程序。适用Web开发、库设计等场景,显著减少运行时错误,值得收藏。

FuncTide的博客 982

Python 潮流周刊#34:Python 3.13 的 JIT 方案又新又好

△△请给“Python猫”加星标,以免错过文章推送你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。本周刊开源,欢迎投稿[1]。另有电报频道[2]作为副刊,补充发布更加丰富的资讯,欢迎关注。????文章&教程1、简单聊聊 Python 3.13 的 JIT 方案[3]Python 3.13 将引入一个 copy-and-patch JIT 编译器,它尽可能地...

Python猫 2504
上一篇: 智人之上,智能崛起,人类智能是怎么进化出来的?
下一篇: Python3.8即将结束生命周期
菜鸟学Python
博客等级 码龄9年 8063粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值