Python 3.8与3.9的区别

一、性能提升

Python一直以来都以慢著称,Python3.9相对于3.8来说在性能提升方面有了一些改进。Python 3.9 的字符串方法现在比以前快了 20% 至 30%, 在有些情况下(例如字符串格式化和正则表达式)可以提高高达 50%。此外,3.9 还更快地解析字节码、有一个全新的解析器以及集成了一种新的哈希算法,这些都可以在性能上提高。

举个例子,Python3.9 对 PEP 563 中的 Lazy import 进行了优化,Lazy import 能够大幅降低启动时的解释器内存占用,从而缩短启动耗时。这意味着更大的代码库与更短的启动时间,特别是在大型的代码库和团队中会受益良多。

下面代码演示了 Python3.9 对于字符串方法的性能优化。

    
    # Python 3.8
    python3.8 -m timeit -n 1000000 "s = ''.join(['a' for _ in range(10000)])" "s = s.strip()"

    # Python 3.9
    python3.9 -m timeit -n 1000000 "s = ''.join(['a' for _ in range(10000)])" "s = s.strip()"
    

二、新特性

在新版本中,Python不断推陈出新,3.9 版本中有一些非常酷炫的新特性,比如:

1. 通过 importlib.metadata 访问安装在 Python 中的软件包元数据
2. 通过 PE 615 实现类型注释中的 Union 在细节方面的改进
3. 可自定义解释器级别的警告
4. 新的操作符 |=, ^=, 及 &= 在 dict 类型中支持原位操作
5. 增加了删除 dict 类型中指定键的方法
6. 新生产者——消费者集合 Queue.SimpleQueue
7. time 模块支持各种高精度时间戳,比如时间范围内的月数、周数和天数。等等

下面是 Python3.9 版本中一个新的字符串方法的样例:

    
    # Python 3.9
    '12345'.removeprefix('12')
    '12345'.removesuffix('34')
    

三、语法糖的改进

Python一直都被人称作“胶水语言”,原因是因为它的语法灵活,使得许多任务变得非常容易。Python3.9 在语言方面加入了许多新的语法特性。

举个例子,Python3.9新增了一种新的操作符 |=,它是 dict 类型的原位操作。

    
    # 操作符 |= 示例
    d = {'spam': 1}
    d |= {'ham': 2}
    print(d) # {'spam': 1, 'ham': 2}
    

除此之外,Python3.9还进行了一些小幅度的改进,例如:使用字典推导式创建有重复键时,新版本的字典推导式仅保留最后一个键。

下面是使用 Python3.9 版本中的新语法特性创建字典的样例:

    
    # Python 3.8
    d = {k: v for k, v in [('spam', 1), ('spam', 2), ('ham', 3)]}
    print(d) # {'spam': 2, 'ham': 3}

    # Python 3.9
    d = {k: v for k, v in [('spam', 1), ('spam', 2), ('ham', 3)]}
    print(d) # {'spam': 2, 'ham': 3}
    

四、类型提示

类型提示一直是 Python3.x 版本的一个非常重要的特性,它使得 Python 代码变得更加可读可维护。Python3.9 版本也进行了一些小幅度的升级,其中最显著的变化是更好的 Type Union。以下是 Type Union 在 Python3.9 版本中的演示:

    
    # Python 3.8
    def func(a: 'int | str') -> None:
        return a

    # Python 3.9
    def func(a: int | str) -> None:
        return a
    

相比之前,Python3.9 中的 Type Union 语法更为简洁易读。

五、字面量中区分私有属性和函数

在 Python 中,想要标识一个属性或函数为私有的,通常会在其名字前面加上一个下划线,例如:_my_private_function。但在旧版本中,即使这种方式已经成为了惯例,但也只能算是类库的一种约定,Python3.9 版本中,加入了这个官方机制,可以直接标识私有属性或函数,以明确其访问权限。

下面的代码演示了 Python3.9 版本中如何使用字面量来区分私有函数和常规函数:

    
    # Python 3.8
    def my_function(arg1, arg2):
        _my_private_implementation(arg1, arg2)
        
    def _my_private_implementation(arg1, arg2):
        pass

    # Python 3.9
    def my_function(arg1, arg2):
        def _my_private_implementation(arg1, arg2):
            pass
        _my_private_implementation(arg1, arg2)
    

六、结语

以上是 Python3.9 和3.8版本的一些不同之处。Python3.9 版本更快、更易读、更易维护,同时实现了更高效的代码和更简单易懂的语法。尽管可能存在使用 Python3.9 版本之前,API 不兼容或者构 b成本等问题,但是升级到 Python3.9 版本值得一试,因为它能带来很多好处。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/245312.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:08
下一篇 2024-12-12 13:08

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论