Python3.11正式版,它来了!

转载请注明出处❤️

作者:测试蔡坨坨

原文链接:caituotuo.top/b055fbf2.html

你好,我是测试蔡坨坨。

就在前几天,2022年10月24日,Python3.11正式版发布了!

Python3.11正式版,它来了!

Python官方在2020年1月1日结束了对Python2的维护,这也意味着Python2已经成为历史,真正进入了Python3时代。自从进入Python3版本以来,官方已经发布了众多修改版本分支,现在最新的正式版本就是前不久刚发布的Python3.11,这一版本历经17个月的开发,现在公开可用,据说对用户更友好。

今天,我们就来一起看看Python3.11都更新了些什么呢。

官方文档:https://docs.python.org/3.11/whatsnew/3.11.html

author: 测试蔡坨坨
datetime: 2022/10/29 15:14
function: Python3.11 输出版本信息

import sys

print("Python Version: ", sys.version)
Python Version:  3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)]
print("Python Version Info: ", sys.version_info)
Python Version Info:  sys.version_info(major=3, minor=11, micro=0, releaselevel='final', serial=0)

速度更快

首先第一点,也是最重要的,就是它更快了,官方说法是Python 3.11比Python 3.10快10-60%。

Python 3.11 is between 10-60% faster than Python 3.10. On average, we measured a 1.25x speedup on the standard benchmark suite. See Faster CPython for details.

众所周知,Python语法简洁、功能强大,特别容易上手,因此使用人数超级多,在众多最受欢迎编程语言榜单中多次位列第一,但是它有一个明显的劣势就是纯Python编写的程序执行效率低,很多开发者都期待这门语言的性能有所提升。

更加人性化的报错

PEP 657: Fine-grained error locations in tracebacks

官方文档:https://docs.python.org/3.11/whatsnew/3.11.html#whatsnew311-pep657

When printing tracebacks, the interpreter will now point to the exact expression that caused the error, instead of just the line.

更加人性化的报错,与之前显示在某一行的报错不同,这个版本的报错会显示具体原因,画出具体位置。

Python编程语言对初学者非常友好,具有易于理解的语法和强大的数据结构,但是对于刚刚接触Python的同学来说却存在一个难题,即如何解释当Python遇到错误时显示的Traceback,有了这个功能就可以帮助用户快速解释错误消息。

举栗:

author: 测试蔡坨坨
datetime: 2022/10/29 15:35
function: PEP 657: Fine-grained error locations in tracebacks

定义一个函数
def data():
    return {
        "name": "测试蔡坨坨",
        "studying": [
            {
                "language": "Python",
                "version": "3.11"
            }
        ]
    }

if __name__ == '__main__':
    # 调用函数并指定一个错误的索引
    print(data()["studying"][2])

Python3.11正式版,它来了!

Python3.11正式版,它来了!

一个IndexError的例子,我们可以看到嵌入在Traceback中的 ~^符号详细地指向导致错误的代码,这种带注释的Traceback对于过于复杂的代码来说是比较友好的。

异常组

PEP 654: Exception Groups and except

官方文档:https://docs.python.org/3.11/whatsnew/3.11.html#whatsnew311-pep654

Exception Groups 让我们的Exception信息具有层次感,之前的Python每次只能处理一个Exception,异常组的使用丰富了Exception的作用,可以引入多个Exception,同时也丰富了我们代码分析的信息量。

举栗:

author: 测试蔡坨坨
datetime: 2022/10/29 15:58
function: PEP 654: Exception Groups and except *

from builtins import ExceptionGroup

def test():
    raise ExceptionGroup(
        "异常嵌套关系",
        [
            ValueError(456),
            ExceptionGroup(
                "引入第三方库",
                [
                    ImportError("无该模块"),
                    ModuleNotFoundError("你需要其他模组")
                ]
            ),
            TypeError("int")
        ]
    )

if __name__ == '__main__':
    test()

Python3.11正式版,它来了!

支持TOML配置解析

PEP 680: tomllib — Support for parsing TOML in the Standard Library

官方文档:https://docs.python.org/3/library/tomllib.html#module-tomllib

增加了TOML(Tom’s Obvious Minimal Language 的缩写)文件的读取,toml文件与自动化测试框架或Web开发中的config、yaml文件类似,都是通过修改配置文件来保持框架源码的不变。Python社区已将TOML作为首选格式,虽然TOML已被使用多年,但Python并没有内置的TOML支持,而在Python3.11中tomllib已经是个内置模块,这个新模块建立在 toml 第三方库之上,允许解析 TOML 文件。

举栗:

demo.toml:

This is a TOML document.

title = "测试蔡坨坨"

[info]
name = "caituotuo"
blog = "www.caituotuo.top"
hobby = ["吃饭", "睡觉", "学Python"]

[other]
enable = true
author: 测试蔡坨坨
datetime: 2022/10/29 16:15
function: PEP 680: tomllib — Support for parsing TOML in the Standard Library

import tomllib

def read_toml():
    with open("demo.toml", "rb") as f:
        data = tomllib.load(f)
        print(data)

if __name__ == '__main__':
    read_toml()
    # {'title': '测试蔡坨坨', 'info': {'name': 'caituotuo', 'blog': 'www.caituotuo.top', 'hobby': ['吃饭', '睡觉', '学Python']}, 'other': {'enable': True}}

更加安全

PEP 675: Arbitrary literal string type

官方文档:https://docs.python.org/3/library/typing.html#typing.LiteralString

The new LiteralString annotation may be used to indicate that a function parameter can be of any literal string type. This allows a function to accept arbitrary literal string types, as well as strings created from other literal strings. Type checkers can then enforce that sensitive functions, such as those that execute SQL statements or shell commands, are called only with static arguments, providing protection against injection attacks.

防止SQL注入,指定参数为LiteralString,当传入普通的String时就不可以工作。

author: 测试蔡坨坨
datetime: 2022/10/29 16:34
function: PEP 675: Arbitrary literal string type

from typing import LiteralString

def run_query(sql: LiteralString):
    pass

def caller(arbitrary_string: str, literal_string: LiteralString) -> None:
    run_query("SELECT * FROM students")  # ok
    run_query(literal_string)  # ok
    run_query("SELECT * FROM " + literal_string)  # ok
    run_query(arbitrary_string)  # type checker error
    run_query(  # type checker error
        f"SELECT * FROM students WHERE name = {arbitrary_string}"
    )

异常Notes

PEP 678: Exceptions can be enriched with notes

官方文档:https://docs.python.org/3/whatsnew/3.11.html#whatsnew311-pep678

常规异常具有添加任意 notes 的扩展能力,可以使用 .add_note()向任何异常添加一个note,并通过检查.__notes__属性来查看现有notes。

author: 测试蔡坨坨
datetime: 2022/10/29 16:53
function: PEP 678: Exceptions can be enriched with notes

try:
    raise TypeError('str')
except TypeError as e:
    e.add_note('类型错了')
    e.add_note('该用int')
    raise e

Python3.11正式版,它来了!

以上几点就是我认为 Python 3.11 比较有意思的部分,更多内容可参考官方文档,想体验新功能的小伙伴感觉去试试新版本吧 ~

Original: https://www.cnblogs.com/caituotuo/p/16841454.html
Author: 测试蔡坨坨
Title: Python3.11正式版,它来了!

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684748/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 实战模拟│企业微信机器人实时报错预警

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月11日
    094
  • Redis

    一、Redis的介绍 什么是Redis Redis是一个开源的使用ANSI C语言编写Key-Value内存数据库 读写性能强,支持多种数据类型 把数据存储在内存中的高速缓存 Re…

    技术杂谈 2023年7月11日
    0103
  • 前端 算法的时间复杂度和空间复杂度

    对于一个问题,经常有多种不同的求解算法,这时候我们就需要一个对算法进行评估的标准,找出最优的方案,评估一个算法有以下几个维度: 正确性:能正确的实现功能,满足问题的需求。 易读性:…

    技术杂谈 2023年5月31日
    088
  • validform学习

    1 说明 validform非常实用,可以用来进行表单验证,是基于jquery框架的,一共就导出两个文件,一个css文件,一个js文件。启动也只需一句js语句即可,相当方便。 可以…

    技术杂谈 2023年7月25日
    0100
  • String为什么不是基本数据类型

    java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。 O…

    技术杂谈 2023年6月21日
    0104
  • 需求项目迭代思考-by k

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/shoshana-kong/p/16498659.htm…

    技术杂谈 2023年6月1日
    0117
  • Spring中的声明式事务管理

    方式一:基于xml配置文件方式 1.创建一个测试类 package com.dzj.service; import com.dzj.dao.UserDaoImpl; import …

    技术杂谈 2023年6月21日
    0120
  • K8S的安装部署以及基础知识

    Kubernetes(K8S)概述 Kubernetes又称作k8s,是 Google在2014年发布的一个开源项目。 最初Google开发了一个叫 Borg的系统(现在命名为Om…

    技术杂谈 2023年7月11日
    099
  • 多态

    一.相关定义 1-1 多态 多态是同一个行为具有多个不同表现形式或形态的能力。同一个形参类型为基类的接口,使用不同的子类的实例可以执行不同操作。 1-2 绑定 绑定:将一个方法调用…

    技术杂谈 2023年7月23日
    089
  • 异常

    异常的处理方式: 1.JVM处理 JVM处理异常的过程: ​ 1).打印异常的信息 2).显示出异常的位置 3.)停止了程序 2.自己处理 try{}catch{}finally{…

    技术杂谈 2023年6月21日
    072
  • 关于工资倒挂

    工资倒挂是指「新员工能力不如老员工,工资却高过老员工」。 如果你是上述老员工 你会觉得不爽,因为不公平。但在多数情况下,其实这件事并不坏: 你打算离职 从新员工工资来看, 你的市场…

    技术杂谈 2023年7月11日
    087
  • linux下centos7.2下安装redis 4.0.6

    一、安装 redis 第一步:下载 redis 安装包 wget http://download.redis.io/releases/redis-4.0.6.tar.gz [roo…

    技术杂谈 2023年6月21日
    0109
  • OS第三章错题补充

    OS第三章错题补充 ​ 批处理作业调度原则:公平性、极大的流量、平衡资源使用 ​ ​ 每个进程申请该类资源最多为4,6*3=18,再加上一个额外的资源,所以20个资源完全够6个程序…

    技术杂谈 2023年7月11日
    095
  • node glob 文件查找

    glob https://www.npmjs.com/package/glob Original: https://www.cnblogs.com/mengfangui/p/158…

    技术杂谈 2023年5月31日
    097
  • Java并发编程之AQS以及源码解析

    文章目录 概览 实现思路 实现原理 * 源自CLH锁 AQS数据模型 CAS操作 主要方法 * 自定义同步器的实现方法 AQS定义的模板方法 源码解读 * 等待状态释义 AQS获取…

    技术杂谈 2023年7月24日
    0140
  • 腾讯PHP/GO工程师面试经历

    一面是技术面,用的腾讯会议,开局自我介绍之后就开始做题。题目不算难,都非常考验基础扎不扎实。面试官特别喜欢就一个问题深入去问,直到你卡壳。 第一题是非常经典的,从浏览器敲下地址到页…

    技术杂谈 2023年5月31日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球