举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > python3.9更新内容 python3.9更新

python3.9更新内容 python3.9更新

2023-03-05 22:20 Python3教程

python3.9更新内容 python3.9更新

python3.9更新内容

Python 3.9 是一个重要的更新,它提供了许多新功能和改进,以帮助开发人员更好地利用 Python 进行编程。

首先,Python 3.9 增加了一个新的语法特性:“walrus operator”(:=)。这个特性允许开发人员在表达式中声明和初始化变量。这使得代码更加简洁,并减少了重复代码的数量。

此外,Python 3.9 还增加了一个新的标准库——“zoneinfo”。它允许开发人员使用时区信息来处理日期和时间数据。它还具有一个新的标准库——“importlib.metadata”,它允许开发人员从 Python 包中读取元数据信息。

此外,Python 3.9 还增加了对 Unicode 13 的支持。Unicode 13 添加了 8,018 个字符,包括新的表情符号、国旗、字体图标和字形修饰符号。

此外,Python 3.9 还增加了对 type annotations 的内省能力。这使得开发人员能够从函数中读取 type annotations 信息并将其用于静态分析或测试目的。

def foo(a: int, b: str) -> str:  # type annotations 
    return a + b  # return type is str

此外,Python 3.9 还增加了对 f-strings 的优化能力。f-strings 允许开发人员在字符串中使用表达式来生成字符串内容。优化后的 f-strings 具有更快的执行速度和低内存占用量。

>> name = 'John'  # define a variable 
>>> age = 20  # define another variable 
>>> print(f'My name is {name} and I am {age} years old.')   # use f-string to print the variables' values  
My name is John and I am 20 years old.

最后,Python 3.9 还增加了对 Windows Subsystem for Linux 2 (WSL 2) 的原生支持。WSL 2 支持 Linux 子系统在 Windows 10 上运行 Linux 应用程序(如 Ubuntu、Debian、Kali Linux 等)而不需要虚拟机或 Docker 容器。

python3.9更新

Python 3.9 已于2020 年 10 月 5 日发布,新版本的特性,你 get 到了吗?对于 Python 程序员来说,这又是一个令人兴奋的时刻。

相比于之前的版本,Python 3.9 有哪些值得讨论的功能呢?

简而言之,从字典更新 / 合并到添加新的字符串方法,再到 ​zoneinfo​ 库的引入,Python 3.9 添加了许多新特性。此外,该版本还引入了一种稳定、高性能的新型解析器。

标准库更新了许多新特性,并添加了新模块 ​zoneinfo ​和 ​graphlib​。此外该版本也对许多模块进行了改进,如 ​ast​、​asyncio​、​concurrent.futures​、​multiprocessing​、​xml ​等。

现在让我们一起探索 Python 3.9 的新特性。

Python 3.9:10 个有趣的新特性

1. 字典更新和合并

合并 (|) 与更新 (|=) 运算符已被加入内置的 ​dict ​类。 它们为现有的 dict.update 和 {**d1, **d2} 字典合并方法提供了补充。

示例:

>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{"key1": "value1 from x", "key2": "value2 from y", "key3": "value3 from y"}
>>> y | x
{"key2": "value2 from x", "key3": "value3 from y", "key1": "value1 from x"}

2. 基于 PEG 的高性能解析器

Python 3.9 提出用高性能和稳定的基于 PEG 的解析器取代当前基于 LL(1) 的 Python 解析器。

当前的 CPython 解析器基于 LL(1),LL(1) 解析器是一个自顶向下的解析器,它从左到右解析输入。

Python 3.9 提议将 LL(1) 替换为新的基于 PEG 的解析器,这意味着它将解除当前 LL(1) 语法对 Python 的限制。此外,当前的解析器修补了许多将要删除的 hack。因此,从长远来看,这会降低维护成本。

3. 新型字符串函数:删除前缀和后缀

Python 3.9 将两个新函数添加到 str 对象:

第一个函数用于删除前缀:​str.removeprefix(prefix)

第二个函数用于删除后缀:​str.removesuffix(suffix)

4. 对内置泛型类型提供类型提示

Python 3.9 通过删除并行类型层次结构,使注释程序变得更加简单。Python 3.9 支持 ​typing ​模块所有标准集合中的泛型语法。

我们可以将 ​list ​或 ​dict ​直接作为列表和字典的类型注释,而不必依赖 ​typing.List​ 或者 ​typing.Dict​。因此,代码现在看起来更加简洁,而且更容易理解和解释。

5. DateTime 支持 IANA 时区

zoneinfo ​模块被创建出来支持 IANA 时区数据库。对 IANA 时区数据库的支持已经添加到标准库中。

示例:

>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime, timedelta

>>> # Daylight saving time
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
>>> print(dt)
2020-10-31 12:00:00-07:00
>>> dt.tzname()
"PDT"

>>> # Standard time
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00
>>> print(dt.tzname())
PST

IANA 时区通常称为 ​tz ​或 ​zone info​。存在许多具备不同搜索路径的 IANA 时区,用于为 ​datetime ​对象指定 IANA 时区。例如,我们可以将对 ​datetime ​对象设置搜索路径​Continent/City​来设置​ tzinfo​。

如果传入一个无效的密钥,则会引发​ zoneinfo.ZoneInfoNotFoundError​ 异常。

6. concurrent.futures 优化

concurrent.futures.Executor.shutdown()​ 中添加了一个新参数​ cancel_futures​。此参数可以取消尚未执行的并发任务。在 Python 3.9 之前主进程只有在所有并发任务完成后才能关闭 ​executor ​对象。

新参数 ​cancel_futures ​已被添加到 ​ThreadPoolExecutor ​以及 ​ProcessPoolExecutor​。它的工作方式是:当参数的值为 ​True ​时,在调用 ​shutdown()​ 函数时取消所有待处理的任务。

7. 异步编程和多进程优化

Python 3.9 对异步编程(​asyncio​)和多进程库进行了优化。

2. 新增了 ​coroutines​、​shutdown_default_executor()​ 和 ​asyncio.to_thread()​ 。​shutdown_default_executor​ 负责关闭默认 ​executor​,​asyncio.to_thread()​ 主要用于在一条单独的线程中运行 IO 密集型函数,以避免事件循环。

关于多进程库的改进,Python 3.9 向 ​multiprocessing.SimpleQueue​ 类添加了新方法 ​close()​。

此方法可以显式地关闭队列。这将确保队列关闭并且停留时间不会比预期长。值得注意的是,一旦关闭队列,就不能调用​ get()​、​put() ​和 ​empty() ​方法。

8. 统一的软件包导入错误

Python3.9 之前的版本在导入 Python 库时存在的主要问题是:当相对导入超出其顶级包时,Python 中的导入行为不一致。

builtins.__import__() ​引发 ​ValueError​,而 ​importlib.__import__() ​引发 ​ImportError​。Python3.9 版本进行了修复,它将统一引发 ​ImportError​。

9. 生成随机字节

Python 3.9 版本中添加了新的函数​ random.Random.randbytes()​。该函数可用于生成随机字节。

Python 支持生成随机数,但如果需要生成随机字节呢?在 Python3.9 版本之前,开发人员必须想方设法生成随机字节。尽管他们可以使用​ os.getrandom()​、​os.urandom()​ 或者 ​secrets.token_bytes() ​来生成随机字节,但这些方法无法生成伪随机模式。

为了确保随机数的产生符合预期行为,并且过程可复现,开发人员通常将种子(seed)与 ​random.Random ​模块一起使用。因此,Python 3.9 添加了 ​random.Random.randbytes()​ 方法,以可控的方式生成随机字节。

10. 修复字符串替换函数

在 Python 3.9 版本之前,对于所有非零的 n,"".replace("",s,n) 返回空字符串而不是 s。这个错误使用户困惑,并导致应用程序的不一致行为。

Python 3.9 修复了该问题,不管 n 是否为 0,其结果都与 "".replace("", s) 一致。

如果大家想深入了解更多细节,请查阅官方文档:https://docs.python.org/zh-cn/3.9/whatsnew/3.9.html


阅读全文
以上是名动网为你收集整理的python3.9更新内容 python3.9更新全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们