Python 3.8 正式发布,新特性全面解读

Python 3.8 发布,带来了很多新特性,如编译的字节码文件的并行文件系统缓存,放宽了某些语言限制,增强了模块功能,改进了 asyncio 和 gettext 模块。此外,还有统计模块的增强,优化了 pickle 模块的性能,以及一些API和功能的删除。开发者需要注意代码的更新和移植工作。
摘要由CSDN通过智能技术生成

我是PythonGao。 本文详细介绍 Python 3.8中的新功能,以及和与3.7相比。

14510093-7085403387f8f529
image

预览用户应该知道此文档在官方目前处于更新模式形式。随着Python 3.8向发布方向发展,它将会大幅更新,因此即使在阅读早期版本之后也值得检查。

新功能

编译的字节码文件的并行文件系统缓存
新的 PYTHONPYCACHEPREFIX设置(也可用 )将隐式字节码缓存配置为使用单独的并行文件系统树,而不是每个源目录中的默认子目录。-X pycache_prefix__pycache__

报告缓存的位置sys.pycache_prefix(None表示pycache子目录中的默认位置)。

其他语言变更

一个continue说法是非法finally条款因与实施问题。在Python 3.8中,这一限制被取消了。

该int类型现在具有as_integer_ratio()与现有float.as_integer_ratio()方法兼容的新方法.

增加了对\N{name}的支持。

Dictdictviews现在可以使用反向插入顺序进行迭代 reversed()

函数调用中允许关键字名称的语法进一步受到限制。特别是,f((keyword)=arg)不再允许。它从来没有打算在关键字参数赋值术语的左侧允许多于一个裸名称。见bpo-34641。

现在允许Iterable解包,而不使用括号yield 和return语句。(由David Cuthbert和Jordan Chapman在bpo-32117中提供。)

不是有效转义序列的反斜杠字符对DeprecationWarning从Python 3.6开始生成。在Python 3.8中它生成了一个SyntaxWarning代替。(由Serhiy Storchaka供稿于bpo-32912。)

SyntaxWarning在某些情况下,编译器会在元组或列表之前错过逗号时生成。例如:

<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: inherit; font-size: inherit; line-height: inherit;">

1data = [
2 (1, 2, 3) # oops, missing comma!
3 (4, 5, 6)
4]

</pre>

子类之间的算术运算datetime.datedatetime.datetimedatetime.timedelta对象现在返回子类的实例,而不是基类。这也会影响其实现(直接或间接)使用datetime.timedelta算术的操作的返回类型,例如 datetime.datetime.astimezone()

当Python解释器被Ctrl-C(SIGINT)中断并且KeyboardInterrupt未捕获到的结果异常时,Python进程现在通过SIGINT信号或正确的退出代码退出,以便调用进程可以检测到它因Ctrl而死亡-C。POSIX和Windows上的shell使用它来正确终止交互式会话中的脚本。

改进的模块

现在的_asdict()方法collections.namedtuple()返回一个dict而不是一个collections.OrderedDict。这是有效的,因为自Python 3.7以来,常规dicts已经保证了排序。如果需要额外的功能OrderedDict,建议的补救措施是将结果转换为所需的类型:OrderedDict(nt._asdict())。
unicodedata模块已升级为使用Unicode 12.0.0 版本。

ASYNCIO

在Windows上,现在是默认的事件循环ProactorEventLoop。

gettext

添加pgettext()及其变体。

检查

如果该属性是值为docstrings的位置,该inspect.getdoc()函数现在可以找到文档字符串。这提供了类似于我们已经有文件的选项,以及:__slots__dictproperty()classmethod()staticmethod()

<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: inherit; font-size: inherit; line-height: inherit;">

1class AudioClip:
2 slots = {'bit_rate': 'expressed in kilohertz to one decimal place',
3 'duration': 'in seconds, rounded up to an integer'}
4 def init(self, bit_rate, duration):
5 self.bit_rate = round(bit_rate / 1000.0, 1)
6 self.duration = ceil(duration)

</pre>

GC

get_objects()现在可以接收一个可选的生成参数,指示从中获取对象的生成。由Pablo Galindo 提供的 bpo-36016。

gzip

添加了mtime参数以gzip.compress()获得可重现的输出。(由Guo Ci Teo在bpo-34898供稿。)

idlelib和IDLE

超过N行的输出(默认为50ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值