Python3.12发布,性能提升5%(附离线安装包及学习资料)

入门教程、案例源码、学习资料、读者群

请访问: python666.cn

大家好,欢迎来到 Crossin的编程教室 !

本月初,python 3.12 正式发布,现在已经可以从官网下载安装了。

438cf145baa8a371cb1a51a6bf7e3027.png

之前有小伙伴反应,Python 官网经常打不开或者下载很慢,所以我们特地下载好了 Python 3.12 的离线安装包,包括 Windows 和 Mac 的,放在了云盘上,有需要的同学可自取。

云盘里还有不少 Python 的学习资料,包括编程教室的教程合集、几本开源电子书、近50个实例代码。

63a22f32ba23c6d25b2c5090f019ae32.png

大家可以直接「转存」备份,以便学习时查阅使用。

云盘地址:

https://caiyun.139.com/m/i?145C7xd0H0vDV 

点击文末「阅读原文」或识别此二维码可进入

e35224cdffe0750df871e16ac94ca432.png

那么 Python 3.12 到底做了哪些更新,又是否值得升级呢?

我们先来看下官方给出的版本更新日志:

b24d3eb3ff820a0b71ea1ef1e58388d4.png

给大家翻译一下:

新功能

  • 更加灵活的 f-string 解析,允许许多以前不允许的操作(PEP 701)。

  • 在 Python 代码中支持 buffer 协议(PEP 688)。

  • 新的调试/性能分析 API(PEP 669)。

  • 支持具有单独全局解释器锁(PEP 684)的独立子解释器。

  • 错误消息进一步改进。现在,由于拼写错误可能导致的更多异常会向用户提出建议。

  • 支持 Linux perf 性能分析器,以在跟踪中报告 Python 函数名称。

  • 许多大大小小的性能改进(如PEP 709和对BOLT二进制优化器的支持),预计将实现整体性能提升约5%。

类型注解

  • 为泛型类引入了新的类型注解语法(PEP 695)。

  • 为方法引入了新的override装饰器(PEP 698)。

这其中一部分更新对我们写代码来说没有什么影响,比如对 Python 性能的提升,直接就会反应在新版本中,不需要开发者做任何额外的操作。

另外有一些功能,可能我们平常也不太会用到。

本次版本更新体感比较明显的大概是这两样:

  1. f-string的功能扩展

  2. 错误消息的改进

下面我们用官方文档中提供的几个示例来简单演示一下。

1. f-string的功能扩展

f-string 是 Python 3.6 开始引入的新特性,它让字符串格式化操作更加丝滑。而现在,它又增加了一些之前不支持的功能。

支持引号中使用同样的引号字符,并且可以无限嵌套

>>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}"
'2'

支持多行字符串

>>> f"This is the playlist: {", ".join([
...     'Take me back to Eden',  # My, my, those eyes like fire
...     'Alkaline',              # Not acid nor alkaline
...     'Ascensionism'           # Take to the broken skies at last
... ])}"
'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'

支持使用转义字符

>>> print(f"This is the playlist: {"\n".join(songs)}")
This is the playlist: Take me back to Eden
Alkaline
Ascensionism
>>> print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}")
This is the playlist: Take me back to Eden♥Alkaline♥Ascensionism

2. 错误消息的改进

新版本的报错信息提示更加明确了,甚至还会给出一些建议。

比如提醒你是不是模块没导入

sys.version_info
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined. Did you forget to import 'sys'?

是不是成员变量忘了加self

>>> class A:
...    def __init__(self):
...        self.blech = 1
... 
...    def foo(self):
...        somethin = blech
... 
>>> A().foo()
Traceback (most recent call last):
  File "<stdin>", line 1
    somethin = blech
               ^^^^^
NameError: name 'blech' is not defined. Did you mean: 'self.blech'?

以及是不是拼写错误

>>> from collections import chainmap
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?

此外,类型注解是 Python 近年来版本更新的重点,从更新日志里把它单独列为一栏就可见一斑。

比如这次又新增了 TypedDict 类型字典对 **kwargs 关键字参数进行更明确的注解:

from typing import TypedDict, Unpack


class Movie(TypedDict):
  name: str
  year: int


def foo(**kwargs: Unpack[Movie]): ...

调用示例:

def foo(**kwargs: Unpack[Movie]) -> None: ...


movie: dict[str, object] = {"name": "Life of Brian", "year": 1979}
foo(**movie)  # WRONG! Movie is of type dict[str, object]


typed_movie: Movie = {"name": "The Meaning of Life", "year": 1983}
foo(**typed_movie)  # OK!


another_movie = {"name": "Life of Brian", "year": 1979}
foo(**another_movie)  # Depends on the type checker.

那么,我们现在需要更新到 Python 3.12 吗?

我的建议是:

  1. 初学者不要更新。因为这些新功能不是非有不可,而此时很多但第三方库还没有完全适配 3.12 版本,存在不兼容的可能。用最新的版本弊大于利。

  2. 生产环境不要更新。这点不必我说,想必程序员们都懂的。除了适配方面的原因,本身一个大版本的最初几个小版本就可能存在更多的bug,建议让版本飞一段时间稳定后再用,没必要去做小白鼠。

  3. 对于开发者自己练习来说,建议更新。可以提前尝鲜,早点用上新功能。说不定,你还能给官方找出点bug呢。

作者:Crossin的编程教室


Crossin的第2本书《码上行动:利用Python与ChatGPT高效搞定Excel数据分析》已经上市了。

点此查看上一本《码上行动:零基础学会Python编程》介绍

a9d69ff4d0c64e9ddcd1d8a9da6ffcb5.jpeg

本书从 Python 和 Excel 结合使用的角度讲解处理分析数据的思路、方法与实战应用。不论是希望从事数据分析岗位的学习者,还是其他职业的办公人员,都可以通过本书的学习掌握 Python 分析数据的技能。书中创新性地将 ChatGPT 引入到教学当中,用 ChatGPT 答疑并提供实训代码,并介绍了使用 ChatGPT 辅助学习的一些实用技巧,给学习者带来全新的学习方式。

京东双十一5折进行中

读者朋友们购买后可在后台联系我,加入读者交流群,Crossin会为你开启陪读模式,解答你在阅读本书时的一切疑问。

感谢转发点赞的各位~


_往期文章推荐_

编程教室本周视频更新

Python入门|是循环,也是遍历


【教程】: python

【答疑】: 666

更多资源点击阅读原文

↓点击「阅读原文」可获取Python3.12离线安装包及学习资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crossin的编程教室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值