Python 3.11 有什么新功能?

news2025/1/12 12:22:19

详细概述Python 3.11中最重要功能,包括如何安装 beta 版本以及何时可以获得官方稳定版本。

长按关注《Python学研大本营》,加入读者群,分享更多精彩 扫码关注《Python学研大本营》,加入读者群,分享更多精彩

Python在过去四年中三度获得 TIOBE “年度语言”奖。到 2022 年中,这门流行的编程语言仍然在 TIOBE 指数中名列前茅。

Python 在 2022 年 6 月的 TIOBE 指数中名列前茅。

Python 的评分为 12.74% 意味着关键字“Python”出现在大约 13% 的与编程相关的搜索引擎查询中。换句话说,互联网上每第 7 个或第 8 个编程问题都是关于 Python 的。

今天,Python 经常与数据科学和人工智能领域的最大突破联系在一起。从业者欣赏它的简单性、用于大量任务的大量内置和第三方库以及它的社区。

随着 3.11 的最终稳定版本于 2022 年 10 月 3 日发布,Python 社区可以期待各种受欢迎的更新,包括显着的速度提升、更好的错误处理和调试,以及对标准库的大量生活质量改进。

Python 3.11 的新特性

Python 3.11 变更日志包含几乎无穷无尽的错误修复、改进和添加列表,其中大部分您可能永远都不会注意到。但是,当稳定版本到来时,一些关键的新功能可能会大大改善您的 Python 工作流程。这些新功能概述如下。

1.速度提升

让数据科学家兴奋的第一个重大变化是速度提升——与 3.10 相比,标准基准套件的运行速度提高了约 25%。Python 文档声称 3.11 在某些情况下可以快 60%。以下是如何自己执行基准测试,以便自己测试速度改进。

要比较 Python 3.10 和 3.11 的速度,您需要安装 Docker。确保 Docker 桌面正在运行后,在终端中运行这两个命令,这将下载两个 Python 版本的两个镜像。

$ docker run -d python:3.10.4-bullseye

$ docker run -d python:3.11-rc-bullseye

复制代码 下载的图像应该在您的 Docker 仪表板中可见,您也可以在其中启动它们。

python 3.11的Docker安装

启动容器后,您可以运行 docker ps 来查看容器 ID、图像、状态等详细信息。

正在运行的容器也可以在仪表板的 Containers 选项卡下看到,您还可以在其中找到“”旁边的 CLI 按钮Run/Stop ”旁边找到 CLI 按钮单击它们以启动两个容器的终端选项卡。

在两个选项卡中,pyperformance通过pip. 然后,在每个容器终端中运行以下命令。

对于 Python 3.10

$ pyperformance run -r -o py310.json

对于 Python 3.11

$ pyperformance run -r -o py310.jsone run -r -o py311.json

这些命令将为来自标准库的大约 60 个 Python 函数运行基准测试并生成 JSON 元数据。我可以选择添加-r标签来告诉pyperformance我希望测试是严格的,这需要更多时间。就我而言,这两个容器都运行在配备 AMD Ryzen 12 核 CPU 的 Windows 机器上。

现在,我们在两个容器中有两个 JSON 文件,我们需要将它们放在一个目录中以继续进行速度测试。为此,我们将使用docker cp命令将 JSON 文件从 Python 3.11 容器复制到 3.10。

在单独的终端选项卡中运行以下命令,更新路径以反映计算机上的正确路径:

$ docker cp crazy_snyder:/py311.json C:/Users/bex/Desktop

$ docker cp C:/Users/bex/Desktop/py311.json charming_proskuriakova:/

就我而言,crazy_snydercharming_proskuriakova是正在运行的容器的 ID。现在两个 JSON 文件都在 Python 3.10 容器中。要完成基准测试并将结果保存为 CSV,请运行以下命令。

$ pyperformance compare py310.json py311.json --csv comparison.csv

$ docker cp charming_proskuriakova:/comparison.csv C:/Users/bex/Desktop/articles

最后,让我们将 CSV 加载到 Pandas 中并对其进行分析:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

df = pd.read_csv("data/comparison.csv")
df.rename({"Base": "py310", "Changed": "py311", "Benchmark": "function"},
                   axis=1,
                   inplace=True)
>>> df.shape
(59, 3)
>>> df.sample(5)

数据框中的每一行都记录了两个版本运行给定 Python 函数所花费的时间(以毫秒为单位)。让我们绘制一个加速的直方图。

df["speed_up"] = (df["py310"] / df["py311"]).round(3)

fig, ax = plt.subplots()

sns.histplot(df["speed_up"], bins=11)
ax.set(xlabel="Speedup (times)", 
           title="Python 3.10 vs. Python 3.11 - speedup comparison")

plt.show()

python 3.11 和 python 3.10 之间的速度差异

从图中可以清楚地看出,Python 3.11 中的大多数函数都快了大约 1.2 倍 (20%)。我们也可以用平均值和中位数来确认估计。

>>> df["speed_up"].mean()
1.2605593220338982
>>> df["speed_up"].median()
1.207

似乎有一种情况是速度增加超过了 60%。

>>> df["speed_up"].max()
1.899

还有四种情况 Python 3.10 比新版本更快。

>>>  (df["speed_up"] <= 1).sum() 
4

虽然性能提升在纸面上是显而易见的,但改进的具体影响因人而异,并且 Python 3.11 的稳定最终版本尚未发布。基准测试使用纯 Python 函数,您在日常工作中可能不会使用太多,但为 Python 3.10 和 3.11 设置 Docker 安装将使您了解特定用例的速度提升。

2. 更好的错误信息

Python 3.11 的另一个令人兴奋的特性是更好的错误消息传递,可以精确定位错误的确切位置。Python 3.11 没有返回以难以解释的错误消息结尾的 100 行回溯,而是指向导致错误的确切表达式。

python 3.10中的回溯错误

在上面的示例中,Python 解释器指向导致脚本崩溃的 x,因为它的 None 值。在当前版本的 Python 中,该错误是不明确的,因为有两个具有“x”属性的对象。但是,3.11 的错误处理清楚地指出了有问题的表达式。

这个例子展示了 3.11 如何从深度嵌套的字典中查明错误,并且可以清楚地显示错误属于哪个键。

python 3.11中的回溯消息

您可以在复杂的算术表达式中看到相同的精度。

Python 3.11 中的回溯消息

更新后的错误消息绝对是一个受欢迎的补充,特别是对于那些难以调试脚本的数据科学家。

3. 异常说明

“显式胜于隐式。”

上面这句话是Python 之禅的第二行,列出了 Python 的 20 条设计原则。这代表了 Python 代码应尽可能具有表现力的规则。

为了强化这种设计模式,Python 3.11 引入了异常注释 ( PEP 678 )。现在,在您的 except 子句中,您可以add_note()在引发错误时调用该函数并传递自定义消息。

import math

try:
  math.sqrt(-1)
except ValueError as e:
  e.add_note("Negative value passed! Please try again.")
  raise

自定义例外

如果您编写了如下所示的自定义异常类,则可以在受保护的类级属性内向该类添加多个注释__notes__:

import math

class MyOwnError(Exception):
   # Should be a list of strings
   __notes__ = ["This is a custom error!"]

try:
   math.sqrt(-1)
except:
   raise MyOwnError

自定义异常

现在,当解释器遇到错误时,它将在常规消息正文之后显示自定义消息。

还有一种新语法可以使用 except* 子句引发异常,该子句与新的 ExceptionGroup 类一起使用。PEP 654表示您可以使用它在各种情况下同时引发多个不相关的错误。大多数这些情况都太小众了,比如使用 web sockets、与 并发编程等等,这些在日常数据科学工作中很少出现,但是如果你有兴趣,你可以在这里asyncio了解新语法。

4.新的打字功能:Self

静态类型语言有助于使您的代码可读且易于调试。定义变量、函数输入和输出的确切类型可以为您节省数小时的调试时间,并使其他人更容易阅读您的代码。添加键入注释还可以让现代 IDE 在您键入函数名称时显示函数定义,从而使您的函数更容易被其他人解释。

到目前为止,Python 中强大的类型化模块几乎可以为任何数据类型提供类,除了返回自身实例的类。在当前版本的 Python 中,以下示例是不可能的:

from typing import Self
class Language:

  def __init__(self, name, version, release_date):
      self.name = name
      self.version = version
      self.release_date = release_date

  def change_version(self, version) -> Self:
      self.version = version

      return Language(self.name, self.version, self.release_date)

但是,Python 3.11 引入了 Self 类,如果函数的返回值是 self 或类本身的新实例,您可以将其添加到函数的定义中。

5. 标准库的改进

标准库还有一些其他的生活质量改进。首先,在数学模块中添加了两个期待已久的函数。

>>> import math
>>> math.cbrt(9)  # Find the cube-root of x
2.080083823051904
>>> math.cbrt(27)
3.0000000000000004
>>> math.exp2(5)  # Raise 2 to the power of x
32.0

Python 花了 28 年才添加立方根函数的事实令人惊讶,但正如俗话所说,迟到总比没有好。

分数模块还添加了一个新功能,可让您从字符串创建分数:

>>> from fractions import Fraction
>>> Fraction("22/7")  # New in Python 3.11
Fraction(22, 7)
>>> Fraction(numerator=22, denominator=7)
Fraction(22, 7)
>>> Fraction("3e-4")
Fraction(3, 10000)
>>> Fraction("-73/41")
Fraction(-73, 41)
>>> Fraction(3.1415)  # Find the closest approximation to the given float
Fraction(7074029114692207, 2251799813685248)

如您所见,分数模块对于某些算术运算非常方便。主要是,我喜欢你如何找到最接近给定浮点数的分数。您可以通过提供分母限制更进一步:

>>> from math import pi
>>> Fraction(pi).limit_denominator(100000)
Fraction(312689, 99532)

还有一个名为tomllib解析 TOML 文档的新模块。TOML(Tom's Obvious Minimal Language)是一种流行的文件格式,用于编写人类可读的配置文件。这是该项目主页上的图片:

TOML 登陆页面

import tomllib

toml_str = """
python-version = "3.11.0"
release_date = "2022-10-22"
"""

data = tomllib.loads(toml_str)
print(data)  # {'python-version': '3.11.0', 'release_date': '2022-10-22'}
print(data['python-version'])  # 3.11.0
print(data['release_date'])  # 2022-10-22

Python 3.11 发布日期

Python 3.11 的开发于 2021 年 5 月 5 日开始。从那时起,已经发布了 7 个 alpha 版本,与 2022 年 5 月 8 日的第一个 beta 版本相吻合。从这个日期到正式发布,不会有新功能引入Python。

最终的稳定版本将在 2022 年 10 月 3 日发布,同时还有三个 beta 版本和两个候选版本。

推荐书单

《Pandas1.x实例精解》

本书详细阐述了与Pandas相关的基本解决方案,主要包括Pandas基础,DataFrame基本操作,创建和保留DataFrame,开始数据分析,探索性数据分析,选择数据子集,过滤行,对齐索引,分组以进行聚合、过滤和转换,将数据重组为规整形式,组合Pandas对象,时间序列分析,使用Matplotlib、Pandas和Seaborn进行可视化,调试和测试等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。 本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。

链接:https://u.jd.com/UKjx4et

精彩回顾

《Pandas1.x实例精解》新书抢先看!

【第1篇】利用Pandas操作DataFrame的列与行

【第2篇】Pandas如何对DataFrame排序和统计

【第3篇】Pandas如何使用DataFrame方法链

【第4篇】Pandas如何比较缺失值以及转置方向?

【第5篇】DataFrame如何玩转多样性数据

【第6篇】如何进行探索性数据分析?

【第7篇】使用Pandas处理分类数据

【第8篇】使用Pandas处理连续数据

【第9篇】使用Pandas比较连续值和连续列

【第10篇】如何比较分类值以及使用Pandas分析库

长按关注《Python学研大本营》

长按二维码,加入Python读者群

扫码关注《Python学研大本营》,加入读者群,分享更多精彩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【毕业设计】24-基于单片机的电子显示屏的设计与应用(原理图+源码+仿真工程+论文+答辩PPT)

【毕业设计】24-基于单片机的电子显示屏的设计与应用&#xff08;原理图源码仿真工程论文答辩PPT&#xff09; 文章目录资料下载链接任务书设计说明书摘要设计框架架构设计说明书及设计文件源码展示资料下载链接 资料下载链接 资料链接&#xff1a;https://www.cirmall.com/ci…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.13 ES 下载与安装

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.13 ES 下载与安装4.13.1 下载4.13.2 安装4.13.3 使…

网页设计作业学生网页课程设计作业成品DIV+CSS-关于家乡的HTML网页设计

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业&#xff0c;游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运用了html5和cs…

卷积神经网络总结

卷积操作特征图大小计算 图中蓝色部分为55大小的输入卷积层的特征图&#xff0c;黄色部分 为33大小的卷积核&#xff0c;其内部黑色数字为卷积核权重参数&#xff0c;经过卷积操作以后得 到右侧绿色33大小的输出特征图。 如果使用input_N表示输入图像的大小&#xff0c;n表示参…

DJYOS驱动开发系列二:基于DJYOS的IIC驱动编写指导手册

1.概述 DJYOS的DjyBus总线模型为IIC、SPI之类的器件提供统一的访问接口&#xff0c;IICBUS模块是DjyBus模块的一个子模块&#xff0c;为IIC器件提供统一的编程接口&#xff0c;实现通信协议层与器件层的分离。也标准化了IIC总线和 Device驱动接口&#xff0c;本手册指导驱动工…

树与二叉树(二)

**&#x1f6c0; ♡ ♢ ♤ ♧ ♣ ♦ ♥ ♠&#x1f6c0;** &#x1f4a5;**欢迎来到半之半的博客**&#xff0c;**这篇文章主要讲述数据结构中非常重要的一块内容&#xff0c; 即树与二叉树&#xff0c;相信大家学完必会加深自己的理解。&#x1f4a5;****&#x1f55d;我是半只…

Android BLE HIDS Data ,从问询DB 到写入Android 节点的flow 之三

问题点5&#xff1a;Android BLE具体连接flow 并问询DB的API flow 之第二阶段问询&#xff1b; 表示第二阶段的log “Start service discovery: srvc_idx ”在Android9没有&#xff0c;但在Android 8.0中有&#xff0c;所以后续截图基于Android8.0。 -->执行API bta_gattc_…

ORB-SLAM2 ---- Initializer::ReconstructH函数

目录 1.函数作用 2.函数解析 2.1 调用函数解析 2.2 Initializer::ReconstructH函数总体思路 2.2.1 代码 2.2.2 总体思路解析 3.Initializer::CheckRT 3.1 函数作用 3.2 构造函数 3.3 代码 3.4 流程解析 3.4.0 初始化参数 3.4.1 计算初始化两帧的投影矩阵 3.…

[计算机毕业设计]基于SM9的密钥交换方案的实现与应用

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

VMware虚拟机安装黑苹果步骤与常见问题,VMware16,MacOS12.01(Moterey)

资源准备&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1JFtpMVrULiky9l3SvCXX-w 提取码&#xff1a;c452 说明&#xff1a; 1.镜像版本10.14和12.01根据需要选择其一即可&#xff0c;10.14的后缀为cdr&#xff0c;12.01的后缀为ISO&#xff0c;这两种文件VMware都支…

排名前十的运动蓝牙耳机品牌,2022年值得推荐的运动耳机

现在越来越多人使用耳机了&#xff0c;无论是在公交上还是地铁上又或者在运动时&#xff0c;都能看见很多人使用耳机。大多数人群都喜欢在运动健身的时候佩戴着耳机听音乐&#xff0c;音乐能让我们释放压力&#xff0c;并且心情也能够得到愉悦&#xff0c;相比传统有线运动耳机…

抖店token的生成和刷新的实际开发笔记

目录 前言 一、获取token准备事宜 第1点&#xff0c;app_key的获取 第2点&#xff0c;获取method 第3点&#xff0c;获取grant_type 二、token的生成使用步骤 1.token的生成的代码逻辑 三、刷新token的准备事宜 1.refresh_token的获取 2.grant_type的获取 四、token的刷…

AIOT在数字化转型中的机遇和挑战

目录 引言 为什么 IOT 要结合 AI 数字化转型机遇 什么是企业数字化转型 AIOT 在数字化转型中的作用 面临的挑战 架构挑战 安全风险 安全挑战分析 常见安全问题 如何应对 产业赋能 问题分析 如何应对 算力建设 总结 引言 传统的安防市场已经逐渐接近业务成长天花…

一棵完全二叉树的第7层(根节点为第0层)有12个叶子节点,求整棵树最多有多少个节点和最少有多少个节点

答案 一棵完全二叉树的第7层&#xff08;根节点为第0层)有12个叶子节点&#xff0c;求整棵树最多有487487487个节点和最少有139139139个节点。 完全二叉树 定义&#xff1a;一棵深度为kkk的有nnn个节点的二叉树&#xff0c;对树中的节点按从上至下、从左到右的顺序进行编号&am…

Python 对象保存优化机制

Python 为了减少开销与内存的使用而设置一些规则: * 1. 但凡是不可变对象, 在同一个代码块中的对象, 只要是值相同的对象, 就不会重复创建, 而是直接引用已经存在的对象.交互环境下: 不写在一行, 字符类型数据指向一个内存地址, 整型超出小整数则执指向不同的地址. 代码块缩进相…

Hexo搭建Github博客教程

CONTENTS1. 环境配置2. 本地博客搭建3. 部署至Github4. 博客主题设置1. 环境配置 &#xff08;1&#xff09;安装Git Bash&#xff1a;Windows安装配置Git教程&#xff08;2022.11.18 Git2.38.1&#xff09;。 &#xff08;2&#xff09;安装NodeJS&#xff1a;NodeJS的安装及…

基于51单片机的花样流水灯设计

资料编号&#xff1a;113 下面是相关功能视频演示&#xff1a; 113-基于51单片机的花样流水灯设计&#xff08;源码仿真设计报告&#xff09;功能讲解&#xff1a; 采用51单片机的IO控制多个LED灯&#xff0c;实现多种模式的流水灯&#xff0c;全套资料齐全&#xff1a;流水灯…

Aspose.OCR for Java Crack by Xacker

Aspose.OCR for Java 允许您从图像、屏幕截图、图像的特定区域中提取文本&#xff0c;并在任何支持 Java 的平台上从扫描文件创建可搜索的 PDF。凭借其强大且易于使用的 API&#xff0c;即使是复杂的 OCR 任务也只需不到 10 行代码。您无需使用公式和机器学习 - 该库将处理所有…

<C++>深度学习继承

目录 一、继承概念 二、继承的语法 2.1继承关系和访问限定符 2.2派生类继承基类后的成员权限 三、基类和派生类的对象赋值转换 四、继承中的作用域 五、派生类的默认成员函数 六、继承与友元 七、继承与静态成员 八、复杂的菱形继承及菱形虚拟继承 单继承&am…

CS下载、安装以及简单使用

Cobalt Strike4.0中文版下载 渗透利器CobaltStrike 4.0 免费汉化版(含原版补丁) 下载-脚本之家 (jb51.net)下载解压&#xff0c;有中文版本和原版 server&#xff1a;kali&#xff08;自带Java环境&#xff09; clinet&#xff1a;win10 这里直接把原版拖进kali运行不了&#x…