全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1560 3
2020-10-14
摘要–发布要点
新语法功能:

PEP 584,加入工会运营商dict;

PEP 585,标准集合中的类型提示泛型;

PEP 614,放宽了对装饰器的语法限制。

新的内置功能:

PEP 616,用于删除前缀和后缀的字符串方法。

标准库中的新功能:

PEP 593,灵活的功能和变量注释;

os.pidfd_open() 添加了允许进行过程管理而没有种族和信号的情况。

口译员的改进:

PEP 573,从C扩展类型的方法快速访问模块状态;

PEP 617,CPython现在使用基于PEG的新解析器;

现在,使用以下命令加速了许多Python内置函数(范围,元组,集合,frozenset,列表,字典) PEP 590矢量通话;

垃圾回收不会阻止复活的对象;

许多Python模块(_abc,audioop,_bz2, _codecs,_contextvars,_crypt,_functools, _json,_locale,math,operator,resource, time,_weakref)现在使用通过PEP 489定义多相初始化;

许多标准库模块(audioop,ast,grp, _hashlib,pwd,_posixsubprocess,random, select,struct,termios,zlib)现在正在使用的稳定ABI通过PEP 384限定。

新的库模块:

PEP 615现在是IANA时区数据库存在于zoneinfo模块的标准库中;

现在在新graphlib模块中提供了图的拓扑排序的实现。

发布过程更改:

PEP 602,CPython采用年度发布周期。

您应该检查你的代码DeprecationWarning
当仍支持Python 2.7时,为了保留与Python 2.7的向后兼容性,Python 3保留了许多功能。随着Python 2支持的结束,这些向后兼容层已被删除,或者将很快被删除。他们中的大多数人发出了DeprecationWarning几年警告。例如,使用collections.Mapping而不是 collections.abc.Mapping发出DeprecationWarning自2012年发布的Python 3.3。

使用命令行选项测试您的应用程序以查看 和,甚至 将它们视为错误。警告过滤器可用于忽略来自第三方代码的警告。-W defaultDeprecationWarningPendingDeprecationWarning-W error

Python 3.9是提供这些Python 2向后兼容性层的最新版本,以便给Python项目维护者更多的时间来组织对Python 2支持的取消和对Python 3.9的支持。

模块中对抽象基类的别名collections(如的collections.Mapping别名) collections.abc.Mapping保留为最新版本,以实现向后兼容。它们将从Python 3.10中删除。

通常,尝试在Python开发模式下运行测试,这有助于准备代码以使其与下一Python版本兼容。

注意:在此版本的Python中,也删除了许多先前存在的弃用项。请参阅“已删除”部分。

新功能
字典合并和更新运算符
Merge(|)和update(|=)运算符已添加到内置 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'}
看到 有关完整说明,请参见PEP 584。(由Brandt Bucher在bpo-36144中贡献。)

删除前缀和后缀的新字符串方法
str.removeprefix(prefix)并且 str.removesuffix(suffix)已添加,可以轻松地从字符串中删除不需要的前缀或后缀。相应的 bytes,bytearray和collections.UserString方法也已添加。看到有关完整说明,请参见PEP 616。(由Dennis Sweeney在 bpo-39939中贡献。)

类型提示泛型雅集
在类型注释中,您现在可以使用内置的集合类型,例如 list和dict作为通用类型,而不是从中导入相应的大写类型(例如List或Dict) typing。例如,标准库中的其他一些类型现在也通用了queue.Queue。

例:

def greet_all(names: list[str]) -> None:
    for name in names:
        print("Hello", name)
看到 PEP 585了解更多详情。(由Guido van Rossum,Ethan Smith和BatuhanTaşkaya在bpo-39481中贡献。)

新的解析器
Python 3.9使用了一个新的解析器,该解析器基于PEG而不是LL(1)。新解析器的性能大致可与旧解析器媲美,但是在设计新语言功能时,PEG形式主义比LL(1)更灵活。我们将在Python 3.10及更高版本中开始使用这种灵活性。

该ast模块使用新的解析器,并产生与旧解析器相同的AST。

在Python 3.10中,旧的解析器将被删除,依赖它的所有功能也将被删除(主要是parser早已弃用的模块)。仅在Python 3.9中,您可以使用命令行开关()或环境变量()切换回LL(1)解析器。-X oldparserPYTHONOLDPARSER=1

看到 PEP 617了解更多详情。(由Guido van Rossum,Pablo Galindo和Lysandros Nikolaou在bpo-40334中贡献。)

其他语言的变化
__import__()现在提高,ImportError而不是 ValueError,通常是在相对导入超出其顶级包时发生。(由Ngalim Siregar在bpo-37444中贡献。)

Python现在获取在命令行(例如:)上指定的脚本文件名的绝对路径:模块的属性变为绝对路径,而不是相对路径。现在,通过更改当前目录后,这些路径仍然有效。副作用是,在这种情况下,回溯还会显示模块框架的绝对路径。(由Victor Stinner在bpo-20443中贡献。)python3 script.py__file____main__os.chdir()__main__

现在,在Python开发模式和调试版本中,将 检查encoding和errors参数是否进行了字符串编码和解码操作。例如:open(),str.encode()和 bytes.decode()。

默认情况下,为了获得最佳性能,仅在出现第一个编码/解码错误时才检查errors参数,并且对于空字符串有时会忽略encoding参数。(由Victor Stinner在bpo-37388中贡献。)

"".replace("", s, n)现在返回s所有非零值,而不是空字符串n。现在与保持一致。和对象也有类似的变化。(由Serhiy Storchaka在bpo-28029中贡献。)"".replace("", s)bytesbytearray

任何有效的表达式现在都可以用作装饰器。以前,语法的限制要多得多。看到详情请参阅PEP 614。(由Brandt Bucher在bpo-39702中贡献。)

改进了对typing模块的帮助。现在将显示所有特殊格式和特殊通用别名(如Union和List)的文档字符串。使用help()与一般的别名一样List[int]会显示对应的具体类型的帮助(list在这种情况下)。(由Serhiy Storchaka在bpo-40257中贡献。)

平行运行aclose()/ asend()/ athrow()现在禁止,而ag_running现在反映异步发电机的实际运行状态。(由Yury Selivanov在bpo-30773中贡献。)

在调用意外的错误__iter__方法不再掩盖 TypeError在in操作和功能 contains(),indexOf()以及 countOf()在的operator模块。(由Serhiy Storchaka在bpo-40824中贡献。)

新模块
区信息
该zoneinfo模块将对IANA时区数据库的支持引入标准库。它添加zoneinfo.ZoneInfo了datetime.tzinfo以系统时区数据为后盾的具体 实现。

例:

>>>
>>> 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数据库的平台的备用数据源,该tzdata模块以第一方包的形式发布-通过PyPI分发并由CPython核心团队维护。

也可以看看
PEP 615 –支持标准库中的IANA时区数据库
PEP由Paul Ganssle编写并实施

graphlib
添加了一个新模块,该模块graphlib包含graphlib.TopologicalSorter提供用于执行图形拓扑排序功能的 类。(由Pablo Galindo,Tim Peters和Larry Hastings在bpo-17005中贡献。)

改进模块
AST
添加了缩进选项,以dump()使其产生多行缩进输出。(由Serhiy Storchaka在bpo-37995中贡献。)

ast.unparse()作为ast模块中的函数添加,可用于解析ast.AST对象并生成带有代码的字符串,该代码ast.AST在解析时会生成等效的对象。(由Pablo Galindo和Batuhan Taskaya在bpo-38870中贡献。)

向包含用于构造该节点的ASDL签名的AST节点添加了文档字符串。(由Batuhan Taskaya在bpo-39638中贡献。)

异步
由于重大安全问题,不再支持的reuse_address参数 asyncio.loop.create_datagram_endpoint()。这是由于SO_REUSEADDRUDP中的套接字选项的行为。有关更多详细信息,请参见的文档loop.create_datagram_endpoint()。(由Kyle Stanley,Antoine Pitrou和Yury Selivanov在 bpo-37228中贡献。)

添加了一个新的协程 shutdown_default_executor() ,该协程计划为等待ThreadPoolExecutor结束关闭的默认执行程序安排 关闭时间。另外, asyncio.run()已更新为使用新的协程。(由Kyle Stanley在bpo-34037中贡献。)

添加了asyncio.PidfdChildWatcher,它是Linux专用的子监视程序实现,用于轮询进程文件描述符。(bpo-38692)

添加了新的协程 asyncio.to_thread()。它主要用于在单独的线程中运行IO绑定函数,以避免阻塞事件循环,并且实际上run_in_executor()是可以直接使用关键字参数的高级版本 。(由Kyle Stanley和Yury Selivanov在bpo-32309中贡献。)

asyncio.wait_for()现在,由于超时而取消任务时,即使超时<= 0,现在也要等到取消完成为止,就像正超时一样。(由Elvis Pranskevichus在bpo-32751中贡献。)

asyncio现在TyperError使用ssl.SSLSocket套接字调用不兼容的方法时引发。(由Ido Michael在bpo-37404中贡献。)

编译
增加了对重复.pyc文件使用硬链接的新可能性:hardlink_dupes参数和–hardlink-dupes命令行选项。(由Lumír'Frenzy'Balhar在bpo-40495中贡献。)

在结果.pyc文件中添加了用于路径操作的新选项:stripdir,prependdir,limit_sl_dest参数以及-s,-p和-e命令行选项。添加了多次为优化级别指定选项的可能性。(由Lumír'Frenzy'Balhar在bpo-38112中贡献。)

concurrent.futures
向其添加了一个新的cancel_futures参数,concurrent.futures.Executor.shutdown()该参数将 取消所有尚未开始运行的未决期货,而不是在关闭执行程序之前等待它们完成。(由Kyle Stanley在bpo-39349中贡献。)

从ThreadPoolExecutor 和中删除了守护进程线程ProcessPoolExecutor。这提高了与子解释器的兼容性以及其关闭过程的可预测性。(由Kyle Stanley在bpo-39812中贡献。)

在工人们ProcessPoolExecutor现在正在催生需求,只有当没有可用的空闲工作者的重用。这优化了启动开销,并减少了空闲工作者的CPU时间损失。(由Kyle Stanley在bpo-39207中贡献。)

诅咒
新增curses.get_escdelay(),curses.set_escdelay(), curses.get_tabsize(),和curses.set_tabsize()功能。(由Anthony Sottile在bpo-38312中贡献。)

日期时间
在isocalendar()中datetime.date 和isocalendar()的datetime.datetime 方法,现在返回namedtuple(),而不是一个tuple。(由Dong-hee Na在bpo-24416中贡献。)

distutils的
现在,上载命令将创建SHA2-256和Blake2b-256哈希摘要。它会在阻止MD5摘要的平台上跳过MD5。(由Christian Heimes在bpo-40698中贡献。)

的fcntl
新增的常量F_OFD_GETLK,F_OFD_SETLK 和F_OFD_SETLKW。(由Dong-hee Na在bpo-38602中贡献。)

FTPLIB
FTP而FTP_TLS现在提出一个ValueError 如果他们构造了给定超时为零,以防止非阻塞套接字的创建。(由Dong-hee Na在bpo-39259中贡献。)

GC
当垃圾收集器进行一些对象复活的收集时(在完成终结器之后,可以从隔离的循环外部访问它们),请不要阻止所有仍无法访问的对象的收集。(由Pablo Galindo和Tim Peters在bpo-38379中贡献。)

添加了一个新功能,gc.is_finalized()以检查对象是否已由垃圾收集器完成。(由Pablo Galindo在bpo-39322中贡献 。)

hashlib
该hashlib模块现在可以使用OpenSSL中的SHA3哈希和SHAKE XOF(如果有)。(由Christian Heimes在bpo-37630中贡献。)

内置的哈希模块现在可以通过强制使用基于OpenSSL的实现禁用 或有选择地启用。(由Christian Heimes在bpo-40479中贡献)./configure --without-builtin-hashlib-hashes./configure --with-builtin-hashlib-hashes=sha3,blake2

HTTP
HTTP状态代码,并且已添加到中 。(由Dong-hee Na在bpo-39509和Ross Rhodes在bpo-39507中贡献。)103 EARLY_HINTS418 IM_A_TEAPOT425 TOO_EARLYhttp.HTTPStatus

空闲和idlelib
添加了切换光标闪烁的选项。(由Zackery Spytz在bpo-4603中贡献。)

退出键现在关闭IDLE完成窗口。(由Johnny Najera在bpo-38944中贡献。)

在模块名称完成列表中添加了关键字。(由Terry J.Reedy在bpo-37765中贡献。)

上面的更改已反向移植到3.8维护版本。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-10-14 14:29:55


imaplib
IMAP4而IMAP4_SSL现在有一个可选的超时为它们的构造函数的参数。此外,该open()方法现在具有一个可选的超时参数,并且具有此更改。的覆盖的方法IMAP4_SSL和 IMAP4_stream被应用到这种变化。(由Dong-hee Na在bpo-38615中贡献。)

imaplib.IMAP4.unselect()被添加。 imaplib.IMAP4.unselect()释放与所选邮箱关联的服务器资源,并使服务器返回到已验证状态。该命令执行与相同的操作imaplib.IMAP4.close(),除了不会从当前选定的邮箱中永久删除任何邮件。(由Dong-hee Na在bpo-40375中贡献。)

导入库
为了提高与导入语句的一致性,importlib.util.resolve_name() 现在引发ImportError而不是ValueError无效的相对导入尝试。(由Ngalim Siregar在bpo-37444中贡献。)

现在,发布不变模块对象的导入加载程序除了可以单独发布模块之外,还可以发布不变包。(由Dino Viehland在bpo-39336中贡献。)

增加importlib.resources.files()了对包数据中子目录的支持的功能,与importlib_resources 1.5版中的反向端口匹配。(由Jason R.Coombs在bpo-39791中贡献。)

importlib.metadata从importlib_metadata版本1.6.1刷新。

检查
inspect.BoundArguments.arguments从OrderedDict常规字典更改为 (由Inada Naoki在bpo-36350和bpo-39775中贡献。)

ip地址
ipaddress现在支持IPv6范围地址(带后缀的IPv6地址%<scope_id>)。

可以使用解析范围内的IPv6地址ipaddress.IPv6Address。如果存在,则可通过scope_id属性获得作用域区域ID 。(由Oleksandr Pavliuk在bpo-34788中贡献。)

数学
扩展了math.gcd()函数以处理多个参数。以前,它仅支持两个参数。(由Serhiy Storchaka在bpo-39648中贡献。)

补充math.lcm():返回指定参数的最小公倍数。(由Mark Dickinson,Ananthakrishnan和Serhiy Storchaka在 bpo-39479和bpo-39648中贡献。)

补充math.nextafter():返回x之后的下一个浮点值, 朝向y。(由Victor Stinner在bpo-39288中贡献。)

添加math.ulp():返回浮点数的最低有效位的值。(由Victor Stinner在bpo-39310中贡献。)

多处理
该multiprocessing.SimpleQueue班有一个新的 close()方法明确地关闭队列。(由Victor Stinner在bpo-30966中贡献。)

nntplib
NNTP而NNTP_SSL现在提出一个ValueError 如果他们构造了给定超时为零,以防止非阻塞套接字的创建。(由Dong-hee Na在bpo-39259中贡献。)

操作系统
新增CLD_KILLED及CLD_STOPPED对si_code。(由Dong-hee Na在bpo-38493中贡献。)

公开了Linux特定的os.pidfd_open()(bpo-38692)和 os.P_PIDFD(bpo-38713)用于使用文件描述符进行进程管理。

该os.unsetenv()功能现在在Windows上也可用。(由Victor Stinner在bpo-39413中贡献。)

该os.putenv()和os.unsetenv()功能现在始终可用。(由Victor Stinner在bpo-39395中贡献。)

新增os.waitstatus_to_exitcode()功能:将等待状态转换为退出代码。(由Victor Stinner在bpo-40094中贡献。)

pathlib
添加了pathlib.Path.readlink()类似的行为 os.readlink()。(由Girts Folkmanis在bpo-30618中贡献)

PDB
在Windows上现在Pdb支持~/.pdbrc。(由Tim Hopper和Dan Lidral-Porter在bpo-20523中贡献。)

poplib模块
POP3而POP3_SSL现在提出一个ValueError 如果他们构造了给定超时为零,以防止非阻塞套接字的创建。(由Dong-hee Na在bpo-39259中贡献。)

pprint
pprint现在可以漂亮打印了types.SimpleNamespace。(由Carl Bordum Hansen在bpo-37376中贡献。)

是pydoc
现在不仅针对类,函数,方法等,而且针对具有自己__doc__属性的任何对象都显示文档字符串。(由Serhiy Storchaka在bpo-40257中贡献。)

随机
添加了一个新random.Random.randbytes方法:生成随机字节。(由Victor Stinner在bpo-40286中贡献。)

信号
公开了Linux专有信息,signal.pidfd_send_signal()用于使用文件描述符而不是pid向进程发送信号。(bpo-38712)

的smtplib
SMTP而SMTP_SSL现在提出一个ValueError 如果他们构造了给定超时为零,以防止非阻塞套接字的创建。(由Dong-hee Na在bpo-39259中贡献。)

LMTP构造函数现在具有一个可选的timeout参数。(由Dong-hee Na在bpo-39329中贡献。)

套接字
socket现在,该模块可以CAN_RAW_JOIN_FILTERS 在Linux 4.1及更高版本上导出常量。(由Stefan Tatschner和Zackery Spytz在bpo-25780中贡献。)

现在,套接字模块在支持该CAN_J1939协议的平台上支持该协议。(由Karl Ding在bpo-40291中贡献。)

套接字模块现在具有socket.send_fds()和 socket.recv.fds()方法。(由Joannah Nanjekye,Shinya Okano和Victor Stinner在bpo-28724中贡献。)

时间
在AIX上,thread_time()现在实现的分辨率为thread_cputime() 纳秒,而不是 clock_gettime(CLOCK_THREAD_CPUTIME_ID)10毫秒。(由Batuhan Taskaya在bpo-40192中贡献)

SYS
添加了一个新sys.platlibdir属性:特定于平台的库目录的名称。它用于构建标准库的路径和已安装的扩展模块的路径。"lib"在大多数平台上都相同。在Fedora和SuSE上,它等于"lib64"在64位平台上。(由JanMatějek,MatějCepl,Charalampos Stratakis和Victor Stinner在bpo-1294959中贡献。)

以前,sys.stderr在非交互式时是块缓冲的。现在 stderr默认为始终是行缓冲的。(由Jendrik Seipp在bpo-13601中贡献。)

tracemalloc
添加tracemalloc.reset_peak()了将跟踪存储块的峰值大小设置为当前大小的功能,以测量特定代码段的峰值。(由Huon Wilson在bpo-40630中贡献。)

输入
PEP 593引入了一种typing.Annotated类型,以使用上下文特定的元数据和新include_extras参数 来修饰现有类型,typing.get_type_hints()以在运行时访问元数据。(由Till Varoquaux和Konstantin Kashin贡献。)

unicodedata
Unicode数据库已更新至版本13.0.0。(bpo-39926)。

VENV
venv现在提供的激活脚本都始终使用所指定的值来一致地指定其提示自定义 __VENV_PROMPT__。以前,有些脚本是无条件使用的__VENV_PROMPT__,而其他脚本 只有在碰巧被设置的情况下才使用(这是默认情况),而另一种则使用__VENV_NAME__。(由Brett Cannon在bpo-37663中贡献。)

XML
现在,当序列化为xml.etree.ElementTreeXML文件时,可以保留属性中的空白字符 。EOLN不再标准化为“ n”。这是关于如何解释XML规范2.11节的讨论的结果。(由Mefistotelis在bpo-39011中贡献。)

优化
优化了用于在理解中分配临时变量的惯用法。现在,理解就像一个简单的作业一样快 。例如:for y in [expr]y = expr

sums = [s表示[0]中s中的s,x表示[s + x]中s的数据]

与:=运算符不同,此惯用法不会将变量泄漏到外部作用域。

(由Serhiy Storchaka在bpo-32856中贡献。)

在多线程应用程序中优化了信号处理。如果与主线程不同的线程收到信号,则不再在每个字节码指令处中断字节码评估循环,以检查无法处理的未决信号。只有主解释器的主线程可以处理信号。

以前,字节码评估循环在每条指令处都会中断,直到主线程处理信号为止。(由Victor Stinner在bpo-40010中贡献。)

使用来优化subprocessFreeBSD上的模块closefrom()。(由Ed Maste,Conrad Meyer,Kyle Evans,Kubilay Kocak和Victor Stinner在bpo-38061中贡献。)

PyLong_FromDouble()现在,适合的值的速度提高了1.87倍long。(由Sergey Fedoseev在bpo-37986中贡献。)

许多的Python建宏(range,tuple,set, frozenset,list,dict)现在通过使用加速 PEP 590矢量通话协议。(由Dong-hee Na,Mark Shannon,Jeroen Demeyer和Petr Viktorin在bpo-37207中贡献。)

difference_update()针对其他集合远大于基本集合的情况进行了优化。(由Evgeny Kapun建议,代码由MicheleOrrù在bpo-8425中贡献。)

Python的小对象分配器(obmalloc.c)现在允许(最多)一个空的竞技场保持立即可用,而无需将其返回给OS。这样可以防止在简单的循环中颠簸,在每次循环中都可以创建和销毁舞台的简单循环中。(由Tim Peters在bpo-37257中贡献。)

浮动操作的楼层划分现在具有更好的性能。ZeroDivisionError此操作的消息也将更新。(由Dong-hee Na在bpo-39434中贡献。)

现在,使用UTF-8和ascii编解码器解码短ASCII字符串的速度提高了大约15%。(由Inada Naoki在bpo-37348中贡献。)

以下是从Python 3.4到Python 3.9的性能改进摘要:

Python version                       3.4     3.5     3.6     3.7     3.8    3.9
--------------                       ---     ---     ---     ---     ---    ---

Variable and attribute read access:
    read_local                       7.1     7.1     5.4     5.1     3.9    4.0
    read_nonlocal                    7.1     8.1     5.8     5.4     4.4    4.8
    read_global                     15.5    19.0    14.3    13.6     7.6    7.7
    read_builtin                    21.1    21.6    18.5    19.0     7.5    7.7
    read_classvar_from_class        25.6    26.5    20.7    19.5    18.4   18.6
    read_classvar_from_instance     22.8    23.5    18.8    17.1    16.4   20.1
    read_instancevar                32.4    33.1    28.0    26.3    25.4   27.7
    read_instancevar_slots          27.8    31.3    20.8    20.8    20.2   24.5
    read_namedtuple                 73.8    57.5    45.0    46.8    18.4   23.2
    read_boundmethod                37.6    37.9    29.6    26.9    27.7   45.9

Variable and attribute write access:
    write_local                      8.7     9.3     5.5     5.3     4.3    4.2
    write_nonlocal                  10.5    11.1     5.6     5.5     4.7    4.9
    write_global                    19.7    21.2    18.0    18.0    15.8   17.2
    write_classvar                  92.9    96.0   104.6   102.1    39.2   43.2
    write_instancevar               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

Data structure read access:
    read_list                       24.2    24.5    20.8    20.8    19.0   21.1
    read_deque                      24.7    25.5    20.2    20.6    19.8   21.6
    read_dict                       24.3    25.7    22.3    23.0    21.0   22.5
    read_strdict                    22.6    24.3    19.5    21.2    18.9   21.6

Data structure write access:
    write_list                      27.1    28.5    22.5    21.6    20.0   21.6
    write_deque                     28.7    30.1    22.7    21.8    23.5   23.2
    write_dict                      31.4    33.3    29.3    29.2    24.7   27.8
    write_strdict                   28.4    29.9    27.5    25.2    23.1   29.8

Stack (or queue) operations:
    list_append_pop                 93.4   112.7    75.4    74.2    50.8   53.9
    deque_append_pop                43.5    57.0    49.4    49.2    42.5   45.5
    deque_append_popleft            43.7    57.3    49.7    49.7    42.8   45.5

Timing loop:
    loop_overhead                    0.5     0.6     0.4     0.3     0.3    0.3
这些结果是从位于以下位置的变量访问基准脚本生成的 Tools/scripts/var_access_benchmark.py。基准脚本以纳秒为单位显示计时。基准测试是在 运行python.org上运行macOS 64位版本的Intel®Core ™i7-4960HQ处理器上进行的 。

弃用
distutilsbdist_msi命令现在已弃用,请改用 bdist_wheel(滚轮包装)。(由Hugo van Kemenade在bpo-39586中贡献。)

当前math.factorial()接受float具有非负整数值(例如5.0)的实例。它ValueError 为非整数浮点数和负浮点数设置a。现在已弃用。在将来的Python版本中,它将TypeError为所有浮点数加a 。(由Serhiy Storchaka在bpo-37315中贡献。)

在parser和symbol模块被取消,并将在Python的未来版本中删除。对于大多数用例,用户可以使用ast模块来利用抽象语法树(AST)生成和编译阶段。

公共C API函数PyParser_SimpleParseStringFlags(), PyParser_SimpleParseStringFlagsFilename(), PyParser_SimpleParseFileFlags()和PyNode_Compile() 被取消,并将在Python 3.10与旧的解析器一起除去。

不建议NotImplemented在布尔上下文中使用,因为它几乎完全是错误的丰富比较器实现的结果。它将TypeError在将来的Python版本中使用。(由Josh Rosenberg在bpo-35712中贡献。)

该random模块当前接受任何可哈希类型作为可能的种子值。不幸的是,其中某些类型不能保证具有确定性的哈希值。Python的3.9后,该模块将限制其种子None,int, float,str,bytes,和bytearray。

GzipFile不建议在不指定mode参数的情况下打开文件进行写入。在将来的Python版本中,默认情况下它将始终打开以进行读取。指定模式参数以打开它以编写和使警告静默。(由Serhiy Storchaka在bpo-28286中贡献。)

不推荐使用的split()方法_tkinter.TkappType有利于中splitlist()具有更一致和可预测的行为方式。(由Serhiy Storchaka在bpo-38371中贡献。)

协程对象的显式传递asyncio.wait()已被弃用,并将在3.11版中删除。(由Yury Selivanov和Kyle Stanley在bpo-34790中贡献。)

binhex4和hexbin4标准现已弃用。现在不建议使用该binhex模块和以下binascii功能:

b2a_hqx(), a2b_hqx()

rlecode_hqx(), rledecode_hqx()

(由Victor Stinner在bpo-39353中贡献。)

ast类别slice,Index并且ExtSlice被认为已弃用,并将在以后的Python版本中删除。 value本身应代替Index(value)。 应该代替。(由Serhiy Storchaka在bpo-32892中贡献。)Tuple(slices, Load())ExtSlice(slices)

ast类Suite,Param,AugLoad并且AugStore 被认为是过时,并将在未来的Python版本中删除。它们不是由解析器生成的,也不为Python 3中的代码生成器所接受。(由Batuhan Taskaya在bpo-39639和bpo-39969中 以及Serhiy Storchaka在bpo-39988中提供。)

该PyEval_InitThreads()和PyEval_ThreadsInitialized() 功能已取消,并会在Python 3.11被删除。PyEval_InitThreads()现在打电话 没有任何作用。该GIL被初始化Py_Initialize()因为Python 3.7。(由Victor Stinner在bpo-39877中贡献。)

不赞成None将第一个参数传递给该shlex.split()函数。(由Zackery Spytz在bpo-33262中贡献。)

smtpd.MailmanProxy()现在已弃用,因为如果没有外部模块则无法使用mailman。(由Samuel Colvin在bpo-35800中贡献。)

lib2to3现在,模块发出一个PendingDeprecationWarning。Python 3.9切换到PEG解析器(请参阅PEP 617)和Python 3.10可能包含lib2to3的LL(1)解析器无法解析的新语言语法。lib2to3在将来的Python版本中,可以从标准库中删除该模块。考虑第三方替代方案,例如LibCST或 parso。(由Carl Meyer在bpo-40360中贡献。)

的随机参数random.shuffle()已弃用。(由Raymond Hettinger在bpo-40465中贡献)



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-10-14 14:30:35
删除
的错误版本unittest.mock.__version__已被删除。

nntplib.NNTP:xpath()和xgtitle()方法已删除。从Python 3.3开始不推荐使用这些方法。通常,NNTP服务器管理员不支持或未启用这些扩展。对于xgtitle(),请使用nntplib.NNTP.descriptions()或 nntplib.NNTP.description()代替。(由Dong-hee Na在bpo-39366中贡献。)

array.array:tostring()和fromstring()方法已删除。他们别名tobytes()和frombytes(),因为Python 3.2弃用。(由Victor Stinner在bpo-38916中贡献。)

未记录的sys.callstats()功能已被删除。从Python 3.7开始,不推荐使用它,并且总是将其返回None。它需要一个特殊的构建选项CALL_PROFILE,该选项已在Python 3.7中删除。(由Victor Stinner在bpo-37414中贡献。)

该sys.getcheckinterval()和sys.setcheckinterval()功能已被删除。从Python 3.2开始不推荐使用它们。使用 sys.getswitchinterval()和sys.setswitchinterval()代替。(由Victor Stinner在bpo-37392中贡献。)

C功能PyImport_Cleanup()已被删除。记录为:“清空模块表。仅限内部使用。” (由Victor Stinner在bpo-36710中贡献。)

_dummy_thread和dummy_threading模块已被删除。自Python 3.7需要线程支持以来,不推荐使用这些模块。(由Victor Stinner在bpo-37312中贡献。)

aifc.openfp()别名aifc.open(),sunau.openfp()别名 sunau.open()和wave.openfp()别名wave.open()已被删除。自Python 3.7起不推荐使用。(由Victor Stinner在bpo-37320中贡献。)

的isAlive()方法threading.Thread 已删除。自Python 3.8起不推荐使用。使用is_alive()代替。(由Dong-hee Na在bpo-37804中贡献。)

方法getchildren()和getiterator()类 ElementTree和 Element中ElementTree 模块已被删除。在Python 3.2中已弃用它们。使用iter(x)或list(x)代替x.getchildren()和 x.iter()或list(x.iter())代替x.getiterator()。(由Serhiy Storchaka在bpo-36543中贡献。)

旧的plistlibAPI已被删除,自Python 3.4起不推荐使用。使用load(),loads(),dump(),和 dumps()功能。此外,use_builtin_types参数已删除,bytes始终使用标准对象。(由Jon Janzen在bpo-36409中贡献。)

C功能PyGen_NeedsFinalizing已被删除。在实现了CPython之后,并未在CPython中的任何地方对其进行记录,测试或使用PEP 442。Joannah Nanjekye修补程序。(由Joannah Nanjekye在bpo-15088中贡献)

base64.encodestring()和base64.decodestring()(自Python 3.1起不推荐使用的别名)已被删除:使用base64.encodebytes()和 base64.decodebytes()代替。(由Victor Stinner在bpo-39351中贡献。)

fractions.gcd()函数已删除,自Python 3.5(bpo-22486)起不推荐使用:math.gcd()改为使用。(由Victor Stinner在bpo-39350中贡献。)

的缓冲参数bz2.BZ2File已删除。从Python 3.0开始,它被忽略,使用它发出了DeprecationWarning。传递一个打开的文件对象以控制文件的打开方式。(由Victor Stinner在bpo-39357中贡献。)

的编码参数json.loads()已删除。从Python 3.1开始,它已被弃用和忽略。使用它DeprecationWarning自Python 3.8起发出了 。(由Inada Naoki在bpo-39377中贡献)

with (await asyncio.lock):和不再受支持的语句,请改用。这同样适用于正确的 和。(由Andrew Svetlov在bpo-34793中贡献。)with (yield from asyncio.lock):async with lockasyncio.Conditionasyncio.Semaphore

该sys.getcounts()功能,命令行选项和C结构的字段 已被删除。他们需要通过定义宏来进行特殊的Python构建。(由Victor Stinner在bpo-39489中贡献。)-X showalloccountshow_alloc_countPyConfigCOUNT_ALLOCS

该类的_field_types属性typing.NamedTuple已被删除。自Python 3.8起不推荐使用。请改用__annotations__属性。(由Serhiy Storchaka在bpo-40182中贡献。)

该symtable.SymbolTable.has_exec()方法已被删除。自2006年以来已弃用,仅False在调用时返回。(由Batuhan Taskaya在bpo-40208中贡献)

在asyncio.Task.current_task()与asyncio.Task.all_tasks() 已被删除。自Python 3.7起不推荐使用,您可以使用 asyncio.current_task()和asyncio.all_tasks()代替。(由RémiLapeyre在bpo-40967中贡献)

该类中的unescape()方法html.parser.HTMLParser已被删除(自Python 3.4开始不推荐使用)。 html.unescape() 应该用于将字符引用转换为相应的unicode字符。

移植到Python
本节列出了先前描述的更改以及可能需要对代码进行更改的其他错误修正。

Python API中的更改
__import__()而importlib.util.resolve_name()现在提高 ImportError的地方原先提出的ValueError。捕获特定异常类型并支持Python 3.9和更早版本的调用者将需要同时使用。except (ImportError, ValueError):

该venv激活脚本不再当特殊情况下 __VENV_PROMPT__被设置为""。

该select.epoll.unregister()方法不再忽略该 EBADF错误。(由Victor Stinner在bpo-39239中贡献。)

的compresslevel参数bz2.BZ2File变为仅关键字,因为已删除了缓冲参数。(由Victor Stinner在bpo-39357中贡献。)

简化的AST订阅。简单索引将由它们的值表示,扩展切片将被表示为元组。 Index(value)将返回value自身,ExtSlice(slices) 将返回。(由Serhiy Storchaka在bpo-34822中贡献。)Tuple(slices, Load())

importlib现在,该模块将忽略PYTHONCASEOK 使用-E或-I命令行选项时的环境变量。

的编码参数被添加到类ftplib.FTP和 ftplib.FTP_TLS作为唯一的关键字参数,默认的编码是从Latin-1的变化为UTF-8跟随RFC 2640。

asyncio.loop.shutdown_default_executor()已添加到中 AbstractEventLoop,表示从其继承的替代事件循环应定义此方法。(由Kyle Stanley在bpo-34037中贡献。)

__future__为了防止与编译器标志冲突,将更新模块中将来标志的常量值。以前 PyCF_ALLOW_TOP_LEVEL_AWAIT与发生冲突CO_FUTURE_DIVISION。(由Batuhan Taskaya在bpo-39562中贡献)

array('u')现在使用wchar_tC类型代替Py_UNICODE。此更改不会影响其行为,因为它Py_UNICODE是wchar_t自Python 3.3起的别名。(由Inada Naoki在bpo-34538中贡献。)

该logging.getLogger()API现在当通过名称返回根记录'root',而之前它返回一个名为非根记录 'root'。这可能会影响用户代码明确希望使用非root记录器的情况'root',或者实例化logging.getLogger(__name__)在顶层模块中使用的记录器的情况 'root.py'。(由Vinay Sajip在bpo-37742中贡献。)

PurePath现在对返回值进行除法处理,NotImplemented 而不是TypeError在传递了str或实例以外的值时引发a PurePath。这允许创建不从上述类型继承的兼容类。(由Roger Aiudi在bpo-34775中贡献)。

C API的变更
PyType_FromSpec()自Python 3.8起,堆分配类型的实例(例如使用api和类似API创建的实例 )就拥有对其类型对象的引用。如Python 3.8的“ C API的更改”所述,在大多数情况下,应该没有副作用,但是对于具有自定义tp_traverse函数的类型,请确保tp_traverse堆分配类型的所有自定义函数都访问对象的类型。

例:

int
foo_traverse(foo_struct *self, visitproc visit, void *arg) {
// Rest of the traverse function
#if PY_VERSION_HEX >= 0x03090000
    // This was not needed before Python 3.9 (Python issue 35810 and 40217)
    Py_VISIT(Py_TYPE(self));
#endif
}
如果您的遍历函数委托给tp_traverse其基类(或其他类型),请确保Py_TYPE(self)仅对其进行一次访问。请注意,仅堆类型可以访问中的类型tp_traverse。

例如,如果您的tp_traverse函数包括:

base->tp_traverse(self, visit, arg)
然后加:

#if PY_VERSION_HEX >= 0x03090000
    // This was not needed before Python 3.9 (Python issue 35810 and 40217)
    if (base->tp_flags & Py_TPFLAGS_HEAPTYPE) {
        // a heap type's tp_traverse already visited Py_TYPE(self)
    } else {
        Py_VISIT(Py_TYPE(self));
    }
#else
(有关更多信息,请参见bpo-35810和bpo-40217。)

功能PyEval_CallObject,PyEval_CallFunction, PyEval_CallMethod并PyEval_CallObjectWithKeywords已被弃用。使用PyObject_Call()及其变体。(请参阅bpo-29548中的更多详细信息。)

CPython字节码更改
LOAD_ASSERTION_ERROR添加了用于处理该assert语句的操作码 。以前,如果AssertionError隐藏了异常,则assert语句将无法正常工作。(由Zackery Spytz在bpo-34880中贡献。)

该COMPARE_OP操作码被分成四个不同的指令:

COMPARE_OP 进行比较

IS_OP 用于“是”和“不是”测试

CONTAINS_OP 用于“入”和“不是”测试

JUMP_IF_NOT_EXC_MATCH 用于检查“ try-except”语句中的异常。

(由Mark Shannon在bpo-39156中贡献。)

生成更改
--with-platlibdir向configure脚本添加了选项:特定于平台的库目录的名称,存储在新sys.platlibdir 属性中。请参阅sys.platlibdir属性以获取更多信息。(由JanMatějek,MatějCepl,Charalampos Stratakis和Victor Stinner在bpo-1294959中贡献。)

该COUNT_ALLOCS特别打造的宏已被删除。(由Victor Stinner在bpo-39489中贡献。)

在非Windows平台上, 现在需要setenv()和unsetenv()功能来构建Python。(由Victor Stinner在bpo-39395中贡献。)

在非Windows平台上,bdist_wininst现在正式不支持创建安装程序。(有关更多详细信息,请参见bpo-10945。)

从源代码在macOS上构建Python时,_tkinter现在可以与非系统Tcl和Tk框架(如果它们安装在)链接 /Library/Frameworks,就像旧版本的macOS一样。如果使用--enable-universalsdk=或显式配置了macOS SDK -isysroot,则仅搜索SDK本身。仍可以使用--with-tcltk-includes和覆盖默认行为 --with-tcltk-libs。(由Ned Deily在bpo-34956中贡献。)

现在可以为Windows 10 ARM64构建Python。(由Steve Dower在bpo-33125中贡献。)

--pgo使用时现在会跳过一些单独的测试。有问题的测试显着增加了PGO的任务时间,并且可能无助于改善最终可执行文件的优化。这样可以使任务加速约15倍。运行完整的单元测试套件很慢。由于执行的代码分支不多,因此此更改可能会导致优化构建效果稍差。如果您愿意等待慢得多的构建,可以使用来恢复旧的行为 。我们不保证哪个PGO任务集可以产生更快的构建。关心的用户应运行自己的相关基准,因为结果可能取决于环境,工作量和编译器工具链。(有关更多详细信息,请参见bpo-36044和bpo-37707。)./configure [..] PROFILE_TASK="-m test --pgo-extended"

C API更改
新功能
PEP 573:已添加PyType_FromModuleAndSpec()以将模块与类相关联;PyType_GetModule()并 PyType_GetModuleState()检索模块及其状态;和 PyCMethod并METH_METHOD以允许方法来访问它是在定义的类。(在供稿由Marcel PLCH和彼得Viktorin BPO-38787)。

新增PyFrame_GetCode()功能:获取框架代码。新增PyFrame_GetBack()功能:获取下一个外框。(由Victor Stinner在bpo-40421中贡献。)

添加PyFrame_GetLineNumber()到有限的C API中。(由Victor Stinner在bpo-40421中贡献。)

添加了PyThreadState_GetInterpreter()和 PyInterpreterState_Get()函数来获取解释器。添加PyThreadState_GetFrame()了获取Python线程状态的当前框架的功能。新增PyThreadState_GetID()功能:获取Python线程状态的唯一标识符。(由Victor Stinner在bpo-39947中贡献。)

PyObject_CallNoArgs()在C API中添加了一个新的公共函数,该函数调用没有任何参数的可调用Python对象。这是不带任何参数调用可调用Python对象的最有效方法。(由Victor Stinner在bpo-37194中贡献。)

受限C API的更改(如果Py_LIMITED_API定义了宏):

提供Py_EnterRecursiveCall()和Py_LeaveRecursiveCall() 作为有限的API正则函数。以前,它们被定义为宏,但是这些宏无法使用无法访问PyThreadState.recursion_depth字段的受限C API进行编译(受限C API中的结构不透明)。

PyObject_INIT()并PyObject_INIT_VAR()成为常规的“不透明”功能来隐藏实现细节。

(由Victor Stinner在bpo-38644和bpo-39542中贡献。)

PyModule_AddType()添加该功能是为了帮助向模块添加类型。(由Dong-hee Na在bpo-40024中贡献。)

在公共API中添加了这些函数PyObject_GC_IsTracked()和功能, PyObject_GC_IsFinalized()以分别查询是否正在跟踪Python对象或已由垃圾收集器完成了这些对象。(由Pablo Galindo Salgado在bpo-40241中贡献。)

已添加_PyObject_FunctionStr()以获得类似函数的对象的用户友好的字符串表示形式。(由Jeroen Demeyer在bpo-37645中修补)。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-10-14 14:30:49
移植到Python
PyInterpreterState.eval_frame (PEP 523)现在需要一个新的强制性 tstate参数(PyThreadState*)。(由Victor Stinner在bpo-38500中贡献。)

扩展模块:m_traverse, m_clear以及m_free 功能PyModuleDef如果请求模块状态,但尚未分配不再调用。在创建模块后立即执行模块(Py_mod_exec函数)之前就是这种情况。更精确地说,如果m_size大于0并且模块状态(由返回PyModule_GetState())为,则不会调用这些函数NULL。

没有模块状态()的扩展模块不受影响。m_size <= 0

如果Py_AddPendingCall()在子解释器中调用if ,则现在计划将函数从子解释器中调用,而不是从主解释器中调用。现在,每个子解释器都有自己的预定呼叫列表。(由Victor Stinner在bpo-39984中贡献。)

使用sys.path该-E选项时(如果PyConfig.use_environment设置为 0),将不再使用Windows注册表进行初始化。在Windows上嵌入Python时,这一点很重要。(由Zackery Spytz在bpo-8901中贡献。)

现在,全局变量PyStructSequence_UnnamedField是一个常量,它指向常量字符串。(由Serhiy Storchaka在bpo-38650中贡献。)

该PyGC_Head结构现在是不透明的。它仅在内部C API(pycore_gc.h)中定义。(由Victor Stinner在bpo-40241中贡献。)

的Py_UNICODE_COPY,Py_UNICODE_FILL,PyUnicode_WSTR_LENGTH, PyUnicode_FromUnicode(),PyUnicode_AsUnicode(), _PyUnicode_AsUnicode,和PyUnicode_AsUnicodeAndSize()被标记为C.不赞成他们已经被弃用自Python 3.3起为PEP 393。(由Inada Naoki在bpo-36346中贡献。)

Py_FatalError()除非Py_LIMITED_API定义了该宏,否则该函数将替换为自动记录当前函数名称的 宏。(由Victor Stinner在bpo-39882中贡献。)

现在,vectorcall协议要求调用者仅传递字符串作为关键字名称。(有关更多信息,请参见bpo-37540。)

现在隐藏了许多宏和函数的实现细节:

PyObject_IS_GC() 宏已转换为函数。

所述PyObject_NEW()宏变得别名的 PyObject_New()宏,和PyObject_NEW_VAR()宏变得别名的PyObject_NewVar()宏。他们不再直接访问该PyTypeObject.tp_basicsize成员。

PyType_HasFeature()现在总是打电话PyType_GetFlags()。以前,PyTypeObject.tp_flags 当不使用受限的C API时,它直接访问成员。

PyObject_GET_WEAKREFS_LISTPTR()宏被转换为函数:该宏直接访问PyTypeObject.tp_weaklistoffset 成员。

PyObject_CheckBuffer()宏被转换为函数:该宏直接访问PyTypeObject.tp_as_buffer成员。

PyIndex_Check()现在总是声明为不透明函数以隐藏实现细节:删除了PyIndex_Check()宏。宏直接访问PyTypeObject.tp_as_number成员。

(有关更多详细信息,请参见bpo-40170。)

删除
受限制的C API排除PyFPE_START_PROTECT()和的PyFPE_END_PROTECT()宏 pyfpe.h。(由Victor Stinner在bpo-38835中贡献。)

PyTypeObject的tp_print插槽已删除。它用于在Python 2.7及更高版本中将对象打印到文件。从Python 3.0开始,它已被忽略和未使用。(由Jeroen Demeyer在bpo-36974中贡献。)

受限C API的更改(如果Py_LIMITED_API定义了宏):

受限的C API中排除了以下功能:

PyThreadState_DeleteCurrent() (由Joannah Nanjekye在bpo-37878中贡献。)

_Py_CheckRecursionLimit

_Py_NewReference()

_Py_ForgetReference()

_PyTraceMalloc_NewReference()

_Py_GetRefTotal()

垃圾桶机制在有限的C API中从未起作用。

PyTrash_UNWIND_LEVEL

Py_TRASHCAN_BEGIN_CONDITION

Py_TRASHCAN_BEGIN

Py_TRASHCAN_END

Py_TRASHCAN_SAFE_BEGIN

Py_TRASHCAN_SAFE_END

将以下函数和定义移至内部C API:

_PyDebug_PrintTotalRefs()

_Py_PrintReferences()

_Py_PrintReferenceAddresses()

_Py_tracemalloc_config

_Py_AddToAllObjects()(特定于Py_TRACE_REFS构建)

(由Victor Stinner在bpo-38644和bpo-39542中贡献。)

删除了_PyRuntime.getframe钩子,并删除_PyThreadState_GetFrame 了作为别名的宏_PyRuntime.getframe。它们仅由内部C API公开。也删除了PyThreadFrameGetter类型。(由Victor Stinner在bpo-39946中贡献。)

从C API中删除了以下功能。PyGC_Collect() 明确调用以清除所有空闲列表。(由Inada Naoki和Victor Stinner在bpo-37340, bpo-38896和bpo-40428中贡献。)

PyAsyncGen_ClearFreeLists()

PyContext_ClearFreeList()

PyDict_ClearFreeList()

PyFloat_ClearFreeList()

PyFrame_ClearFreeList()

PyList_ClearFreeList()

PyMethod_ClearFreeList()和PyCFunction_ClearFreeList():绑定方法对象的可用列表已被删除。

PySet_ClearFreeList():设置的空闲列表已在Python 3.4中删除。

PyTuple_ClearFreeList()

PyUnicode_ClearFreeList():Unicode可用列表已在Python 3.3中删除。

删除_PyUnicode_ClearStaticStrings()功能。(由Victor Stinner在bpo-39465中贡献。)

已删除Py_UNICODE_MATCH。它已被弃用PEP 393,并且自Python 3.3起已损坏。该PyUnicode_Tailmatch()功能可以代替使用。(由Inada Naoki在bpo-36346中贡献。)

清除了已定义但没有实现的接口的头文件。被删除的公共API符号是: _PyBytes_InsertThousandsGroupingLocale, _PyBytes_InsertThousandsGrouping,_Py_InitializeFromArgs, _Py_InitializeFromWideArgs,_PyFloat_Repr,_PyFloat_Digits, _PyFloat_DigitsInit,PyFrame_ExtendStack,_PyAIterWrapper_Type, PyNullImporter_Type,PyCmpWrapper_Type,PySortWrapper_Type, PyNoArgsFunction。(由Pablo Galindo Salgado在bpo-39372中贡献。)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群