社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

太爽了!Python3.9 的那些新特性

Python绿色通道 • 5 年前 • 456 次点击  

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包 】送你Python自学大礼包

Python 3.9:10 个有趣的新特性

Python 3.9 已经发布,并开发了一些新特性,包括字典合并与更新、新的解析器、新的字符串函数等。

"""
Python 3.9 已于 10 月 5 日发布,新版本的特性,你 get 到了吗?对于 Python 程序员来说,这又是一个令人兴奋的时刻。
相比于之前的版本,Python 3.9 有哪些值得讨论的功能呢?
简而言之,从字典更新/合并到添加新的字符串方法,Python 3.9 添加了许多新特性。此外,Python 3.9 版本还引入了一种稳定、高性能的新型解析器。
"""

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

1. 字典更新和合并

字典添加两个新的运算符:|和|=。|运算符用于合并字典,|= 运算符用于更新字典。

字典合并:

>>> a = {‘farhad’: 1'blog’: 2,'python’: 3}
>>> b = {’farhad’: 'malik’,'topic’: 'python3.9’}
>>> a | b
{’blog’: 2, '
python’: 3, ’farhad’:’malik’,'topic’: 'python3.9’}
>>> b | a
{’farhad’: 1,’blog’: 2'python’: 3,'topic’:’python3.9’ }

字典更新:

>>> a |= b
>>> a
{’blog’: 2'python’: 3,’farhad’:’malik’}

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

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

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

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

'farhad_python'.removeprefix('farhad_')
# returns python
'farhad_python'.removesuffix('_python')
# returns farhad

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

这与其说是一个特性,不如说是一个修复。当以前的Python导入版本出现不一致时,它的早期导入版本出现了 不一致的错误。

"""
builtins.__import__() 引发 ValueError 

importlib.__import__() 引发 ImportError
"""

__import__()现在引发ImportError而不是ValueError,这更有意义。

4. concurrent.futures 优化

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

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

5.随机字节生成

random模块中引入了一个名为randbytes的新方法来生成随机字节。Python已经可以通过3个不同的函数生成随机字节,但它们不能产生伪随机模式。

  • os.getrandom()
  • os.urandom()
  • secrets.token_bytes()

这个random.random.randbytes函数可以以受控的方式生成随机字节,并且可以通过设置种子复制结果。不过,它只能在安全性不重要的情况下使用。

6. zoneinfo时区模块

zoneinfo是python3.9新引入的模块,zoneinfo可以访问Internet号码分配机构(IANA)时区数据库。IANA每年都会多次更新其数据库,这是时区信息的最权威来源。

使用zoneinfo,可以获得数据库中描述任何时区的对象:

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

>>> # 夏令时
>>> dt = datetime(2020103112, tzinfo=ZoneInfo("America/Los_Angeles"))
>>> print(dt)
2020-10-31 12:00:00-07:00
>>> dt.tzname()
'PDT'

>>> # 标准时间
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00
>>> print(dt.tzname())
PST

7. 最小公倍数(LCM)

Python长期以来一直具有用于计算两个数字的最大公约数(GCD)的功能:

>>> import math
>>> math.gcd(4914)
7

最小公倍数(LCM)与最大公约数(GCD)有关,可以根据GCD定义LCM:

>>> def lcm(num1, num2):
...     if num1 == num2 == 0:
...         return 0
...     return num1 * num2 // math.gcd(num1, num2)
...
>>> lcm(4914)
98

在Python 3.9中,不再需要定义自己的LCM函数,它新增了计算最小公倍数功能:




    
>>> import math
>>> math.lcm(4914)
98

8. 更强大的Python解析器

Python 3.9最酷的功能之一是大家在日常编程中不会注意到的功能,那就是解析器的更新。解析器是Python解释器的基本组件。在最新版本中,解析器已重新构建。

Python之前一直使用LL(1)解析器将源代码解析为解析树。你可以将LL(1)解析器视为一次读取一个字符,并解释源代码而无需回溯的解析器。

新解释器是基于PEG(parsing expression grammar)实现的,并非LL(1)。新解析器的性能可以与旧解析器媲美,在设计新语言功能时,PEG比LL(1)更灵活。

在整个标准库中,PEG解析器稍快一些,然而也使用了更多的内存。实际上,使用新解析器时,很难能感知到性能的好坏。

9. 拓扑排序

Python 3.9添加了一个新的模块graphlib,其中包含graphlib.TopologicalSorter类,以提供执行拓扑排序的功能。

>>> dependencies = {
...     "realpython-reader": {"feedparser""html2text"},
...     "feedparser": {"sgmllib3k"},
... }
...

>>> from graphlib import TopologicalSorter
>>> ts = TopologicalSorter(dependencies)
>>> list(ts.static_order())
['html2text''sgmllib3k''feedparser''realpython-reader']

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

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

  1. 由于安全问题的考虑,asyncio.loop.create_datagram_endpoint() 不再支持参数 reuse_address。

  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() 方法。

如果你能看到这里,说明你对Python是持有浓厚兴趣的~

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

Python自学超级硬核资料


最后送大家一份Python学习大礼包,从Python基础,爬虫,数据分析Web开发等全套资料,吃透资料,你可以扔掉其他资料,这些资料都是视频,学起来非常友好 


Ps:都是视频学习资料,非常适合基础不好或者零基础的同学



推荐阅读

  1. 一名程序员自建停车缴费系统,面向监狱编程!

  2. 程序员被公司辞退12天,前领导要求回公司讲清楚代码,结果懵了

  3. 大一新生开发的小工具火了,网友:我好菜

  4. 17岁近满分入清华,今沦为小区保安,他经历了什么?

看完记得关注@Python绿色通道
及时收看更多好文
↓↓↓

点击卡片关注Python绿色通道

回复:大礼包,领取最新Python学习资料


🧐分享、点赞、在看,给个三连击呗👇



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/116679