Python 3.9 编程语言发布

经过一年的发展 提交 重要的编程语言发布 Python的3.9。 Python 3.9 是之后的第一个版本 过渡 项目 新周期 发布的准备和支持。 新的主要版本现在每年生成一次,纠正更新将每两个月发布一次。 每个重要分支将获得一年半的支持,之后将为其开发另外三年半的时间来修复漏洞。

现在,新分支的工作在下一个分支发布前五个月开始,即与 Python 3.9 的发布同时进行 它开始 Python 3.10 分支的 alpha 测试。 Python 3.10 分支将发布为期七个月的 alpha 版本,在此期间将添加新功能并修复错误。 此后,Beta版本将进行为期三个月的测试,在此期间将禁止添加新功能,并将全部精力集中在修复错误上。 发布前的最后两个月,该分支将处于发布候选阶段,在此阶段将进行最终的稳定。

其中 添加 创新 在Python 3.9中:

  • 在使用内置 dict 类定义的字典中, 出现 支持合并运算符“|” 和“|=”更新,补充了之前提出的用于合并字典的 {**d1, **d2} 和 dict.update 方法。

    >>> x = {"key1": "来自 x 的值 1", "key2": "来自 x 的值 2"}
    >>> y = {"key2": "来自 y 的值 2", "key3": "来自 y 的值 3"}

    >>> x | y
    {'key1': '来自 x 的值 1', 'key2': '来自 y 的值 2', 'key3': '来自 y 的值 3'}

    >>> y | X
    {'key2': '来自 x 的值 2', 'key3': '来自 y 的值 3', 'key1': '来自 x 的值 1'}

  • 内置的类型集合包括list、dict和tuple,它们可以用作基本类型,而无需从typing模块导入。 那些。 现在您可以指定而不是typeing.List、typing.Dict和typing.Tuple
    只需列出、字典和元组:

    defgreet_all(names:list[str])->无:
    对于名称中的名称:
    打印(“你好”,姓名)

  • 均提供 用于注释函数和变量的灵活工具。 为了附加注释,打字模块中添加了新的注释类型,使用可用于静态分析或运行时优化的附加元数据扩展了现有类型。 为了从代码访问元数据,include_extras 参数已添加到typing.get_type_hints() 方法中。

    charType = Annotated[int, ctype("char")]
    UnsignedShort = Annotated[int, struct2.ctype('H')]

  • 淡化 装饰器的语法要求 - 任何适合在 if 和 while 块中使用的表达式现在都可以用作装饰器。 这一变化显着提高了 PyQt5 代码的可读性并简化了该模块的维护:

    是:
    button_0 = buttons[0]
    @button_0.clicked.connect

    现在你可以写:
    @buttons[0].clicked.connect

  • 到标准库 添加区域信息,其中包括来自 IANA 时区数据库的信息。

    >>> 从 zoneinfo 导入 ZoneInfo
    >>> 从日期时间导入日期时间,时间增量
    >>> # 夏令时
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("美国/洛杉矶"))
    >>> 打印(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    '太平洋夏令时'

    >>> # 标准时间
    >>> dt += timedelta(天=7)
    >>> 打印(dt)
    2020-11-07 12:00:00-08:00

    >>> 打印(dt.tzname())
    PST

  • 添加了graphlib模块,其中 实施的 支持图的拓扑排序。
  • 建议的 删除前缀和行结尾的新方法 - str.removeprefix(prefix) 和 str.removesuffix(suffix)。 方法已添加到 str、bytes、bytearray 和 collections.UserString 对象中。

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    '酒吧'

  • 涉及 新的解析器 PEG (解析表达式语法),它取代了解析器 法学硕士(1)。 新解析器的使用使得摆脱一些用于绕过 LL(1) 中的限制的“黑客”成为可能,并显着降低了维护解析器的劳动力成本。 在性能方面,新的解析器与之前的解析器大致处于同一水平,但在灵活性方面明显领先,这让您在设计新的语言功能时感到更加自由。 旧的解析器代码暂时保留,可以使用“-X oldparser”标志或“PYTHONOLDPARSER=1”环境变量返回,但将在版本 3.10 中删除。
  • 由...提供 C 扩展方法能够使用直接指针取消引用来访问定义它们的模块的状态,而不是使用 PyState_FindModule 函数搜索模块状态。 此更改允许您通过减少或完全消除检查模块状态的开销来提高 C 模块的性能。 为了将模块与类关联起来,建议使用 C 函数 PyType_FromModuleAndSpec(),为了获取模块及其状态,建议使用 C 函数 PyType_GetModule() 和 PyType_GetModuleState(),并提供访问该类的方法其中定义了 C 函数 PyCMethod 和 METH_METHOD 标志。
  • 垃圾收集器 发表 锁定包含重新激活的对象的集合,这些对象在终结器运行后仍可从外部访问。
  • 添加方法 os.pidfd_open从而允许使用内核子系统 Linux “pidfd”用于处理PID重用的情况(pidfd与特定进程关联且不会改变,而PID可以在与该PID关联的当前进程终止后分配给另一个进程)。
  • 对 Unicode 规范的支持已更新至版本 13.0.0。
  • 被淘汰 内存泄漏 在同一进程中重新初始化 Python 解释器时。
  • 内置类型 range、tuple、set、frozenset、list 和 dict 的性能已得到优化。 实施的 通过使用 Vectorcall 快捷方式协议可以更快地访问用 C 语言编写的对象。
  • 模块 _abc、audioop、_bz2、_codecs、_contextvars、_crypt、_functools、_json、_locale、operator、resource、time 和 _weakref 加载自 初始化分几个阶段.
  • 标准库模块 audioop、ast、grp、_hashlib、pwd、_posixsubprocess、random、select、struct、termios 和 zlib 已转换为使用受限 稳定的ABI,解决了不同版本Python的扩展模块组件的可操作性问题(更新版本时,无需重新构建扩展模块,针对3.9编译的模块将能够在3.10分支中工作)。
  • 由于潜在的安全问题,asyncio 模块已停止支持 reuse_address 参数(使用 SO_REUSEADDR 处理 UDP 数据)。 Linux 允许不同的进程将监听套接字连接到 UDP 端口)。
  • 添加了新的优化,例如,提高了多线程应用程序中信号处理程序的性能,提高了 FreeBSD 环境中子进程模块的速度,以及更快地分配临时变量(在表达式“for y in [expr”中分配变量) ]” 现在与表达式“y = expr” 一样高效”)。 一般来说,大多数测试 节目 与分支 3.8 相比,性能下降(仅在 write_local 和 write_deque 测试中观察到加速):

    Python版本 3.4 3.5 3.6 3.7 3.8 3.9
    —————————————————

    变量和属性读取访问:
    读取本地 7.1 7.1 5.4 5.1 3.9 4.0
    读取非本地 7.1 8.1 5.8 5.4 4.4 4.8
    读取全局 15.5 19.0 14.3 13.6 7.6 7.7
    读内置 21.1 21.6 18.5 19.0 7.5 7.7
    从类中读取类变量 25.6 26.5 20.7 19.5 18.4 18.6
    从实例读取类变量 22.8 23.5 18.8 17.1 16.4 20.1
    读实例变量 32.4 33.1 28.0 26.3 25.4 27.7
    读取实例变量槽 27.8 31.3 20.8 20.8 20.2 24.5
    读取命名元组 73.8 57.5 45.0 46.8 18.4 23.2
    读取绑定方法 37.6 37.9 29.6 26.9 27.7 45.9

    变量和属性写访问:
    写入本地 8.7 9.3 5.5 5.3 4.3 4.2
    写非本地 10.5 11.1 5.6 5.5 4.7 4.9
    写入全局 19.7 21.2 18.0 18.0 15.8 17.2
    写类变量 92.9 96.0 104.6 102.1 39.2 43.2
    写实例变量 44.6 45.8 40.0 38.9 35.5 40.7
    write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    数据结构读访问:
    读列表 24.2 24.5 20.8 20.8 19.0 21.1
    读双端队列 24.7 25.5 20.2 20.6 19.8 21.6
    读字典 24.3 25.7 22.3 23.0 21.0 22.5
    读取strdict 22.6 24.3 19.5 21.2 18.9 21.6

    数据结构写访问:
    写入列表 27.1 28.5 22.5 21.6 20.0 21.6
    写双端队列 28.7 30.1 22.7 21.8 23.5 23.2
    写字典 31.4 33.3 29.3 29.2 24.7 27.8
    写入字符串 28.4 29.9 27.5 25.2 23.1 29.8

    堆栈(或队列)操作:
    列表追加弹出 93.4 112.7 75.4 74.2 50.8 53.9
    双端队列追加弹出 43.5 57.0 49.4 49.2 42.5 45.5
    双端队列追加popleft 43.7 57.3 49.7 49.7 42.8 45.5

    定时循环:
    循环开销 0.5 0.6 0.4 0.3 0.3 0.3

  • 已移除 许多 Python 2.7 函数和方法之前已被弃用并导致在先前版本中产生 DeprecationWarning,包括 html.parser.HTMLParser 中的 unescape() 方法,
    array.array 中的 tostring() 和 fromstring()、threading.Thread 中的 isAlive()、ElementTree 中的 getchildren() 和 getiterator()、sys.getcheckinterval()、sys.setcheckinterval()、asyncio.Task.current_task()、 asyncio.Task.all_tasks()、base64.encodestring() 和 base64.decodestring()。

来源: opennet.ru

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster