Python 3.8.0 正式发布了,以下是主要更新内容:

IT之家10月15日消息Python是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python
3.8.0稳定版现已正式发布,带来了许多新特性和优化。

Python
3.7增添了众多新的类,可用于数据处理、针对脚本编译和垃圾收集的优化以及更快的异步I/O。

  • PEP 572, 赋值表达式
  • PEP 570, 仅位置参数
  • PEP 587, Python
    初始化配置(改进嵌入)
  • 澳门新葡萄京官网注册,PEP 590,
    Vectorcall:CPython 的快速调用协议
  • PEP 578, 运行时审核挂钩
  • PEP 574, 带外数据的
    Pickle 协议 5
  • Typing 相关:PEP
    591,PEP
    586,PEP
    589
  • 并行文件系统缓存,用于编译的字节码
  • 调试版本与发行版本共享 ABI
  • f 字符串支持一个方便的 = 说明符进行调试
  • continue 现在在 finally: 块中
  • 在 Windows 上,默认的异步事件循环现在是 ProactorEventLoop
  • 在 macOS 上,默认情况下现在在多处理中使用 spawn start 方法
  • 现在,多处理(multiprocessing)可以使用共享内存段
  • typed_ast 合并回 CPython
  • LOAD_GLOBAL 现在快了 40%
  • pickle 现在默认使用协议 4,提高了性能

Python 3.8.0稳定版的部分新特性:

Python这种语言旨在使复杂任务变得简单,最新版本Python
3.7已正式进入测试版发布阶段。Python
3.7的最终版定于2018年6月发布,但此后不会为Python 3.7版本添加任何新功能。

更新说明:

•PEP 572,赋值表达式

Python 3.7最重要的添加和改进之处包括如下:

(文/开源中国)    

•PEP 570,仅位置的参数

用类处理数据时减少样板代码的数据类。

•PEP 587,Python初始化配置

一处可能无法向后兼容的变更涉及处理生成器中的异常。

•PEP 590,Vectorcall:用于CPython的快速调用协议

面向解释器的“开发模式”。

•PEP 578,运行时审核挂钩

具有纳秒分辨率的时间对象。

•PEP 574,带外数据的Pickle协议5

环境中默认使用UTF-8编码的UTF-8模式。

•Typing相关:PEP 591,PEP 586和PEP 589

触发调试器的一个新的内置函数。

•并行文件系统缓存,用于编译的字节码

Python数据类

•调试版本与发行版本共享ABI

众所周知,Python是处理结构化数据的一种快捷又方便的方法。Python提供了用来组织管理结构,并将常见行为与数据实例联系起来的类,但是拥有许多初始化器的类历来存在这个弊端:需要大量的样板代码为它们创建实例。比如说:

•typed_ast被合并回CPython

澳门新葡萄京官网注册 1

•LOAD_GLOBAL现在快40%

为了使这实现自动化:为类创建实例,Python
3.7引入了一个新的模块dataclasses,如PEP
557中所述(

•pickle现在默认使用协议4,提高了性能

澳门新葡萄京官网注册 2

因而生成的类运行起来如同普通的Python类。你还可以声明某些字段是“冻结”或不可变的,并且使创建属性的特殊方法(比如__hash__或__repr__)实现自动化。

在学习中有迷茫不知如何学习的朋友小编推荐一个学Python的学习q u n 227
-435- 450可以来了解一起进步一起学习!免费分享软件视频资料

Python生成器异常处理

正如PEP
479中概述(

在Python
3.7中,生成器引发StopIteration异常后,StopIteration异常将被转换成RuntimeError异常,那样它不会悄悄一路影响应用程序的堆栈框架。这意味着如何处理生成器的行为方面不太敏锐的一些程序会在Python
3.7中抛出RuntimeError。而在Python
3.6中,这种行为生成一个弃用警告;在Python 3.7中,它生成一个完整的错误。

一个简易的方法是使用try/except代码段,在StopIteration传播到生成器的外面捕获它。更好的解决方案是重新考虑如何构建生成器――比如说,使用return语句来终止生成器,而不是手动引发StopIteration。想进一步了解如何在现有代码中补救这个问题,如何在新代码中防范该问题,请参阅PEP
469(

Python开发模式

Python解释器新的命令行开关:-X让开发人员可以为解释器设置许多低级选项。在Python
3.7中,选项-X
dev启用“开发模式”,这种运行时检查机制通常对性能有重大影响,但在调试过程中对开发人员很有用。

-X dev激活的选项包括:

asyncio模块的调试模式。这为异步操作提供了更详细的日志记录和异常处理,而异常操作可能很难调试或推理。

面向内存分配器的调试钩子。这对于编写CPython扩展件的那些人很有用。它能够实现更明确的运行时检查,了解CPython如何在内部分配内存和释放内存。

启用faulthandler模块,那样发生崩溃后,traceback始终转储出去。

具有纳秒分辨率的Python时间函数

Python
3.7中一类新的时间函数返回纳秒精度的时间值。尽管Python是一种解释型语言,但是Python的核心开发人员维克多•斯廷纳(Victor
Stinner)主张报告纳秒精度的时间。最主要的原因是,在处理转换其他程序记录的时间值时,可以避免丢失精度。

新的时间函数使用后缀_ns。比如说,time.process_time()的纳秒版本是time.process_time_ns()。请注意,并非所有的时间函数都有对应的纳秒版本,因为其中一些时间函数并不得益于此。

Python UTF-8模式

Python一直支持UTF-8,以便轻松处理字符串和文本。但是周围环境中的语言环境有时仍是ASCII,而不是UTF-8,检测语言环境的机制并不总是很可靠。

Python
3.7添加了所谓的“UTF-8模式”,可通过-X命令行开关启用该模式,该模式假设UTF-8是环境提供的语言环境。在POSIX语言环境中,UTF-8模式默认情况下已被启用,但在其他位置默认情况下被禁用,以免破坏向后兼容。值得试一试在默认情况下开启UTF-8模式,但不应该在生产环境下启用它,除非你确信Python与周围环境的所有交互都使用UTF-8。

内置breakpoint()函数

Python随带内置的调试器,不过它也可以连入到第三方调试工具,只要它们能与Python的内部调试API进行对话。不过,Python到目前为止缺少一种从Python应用程序里面以编程方式触发调试器的标准化方法。

Python
3.7添加了breakpoint(),这个内置函数使得函数被调用时,让执行切换到调试器。相应的调试器不一定是Python自己的pdb,可以是之前被设为首选调试器的任何调试器。以前,调试器不得不手动设置,然后调用,因而使代码更冗长。而有了breakpoint(),只需一个命令即可调用调试器,并且让设置调试器和调用调试器泾渭分明。

其他新的Python 3.7功能

Python
3.7有另外的众多变更。下面是你在使用最新版本的Python时可能会遇到的其他一些功能:

面向线程本地存储支持的C-API

PEP
539中描述(

模块属性访问定制

你在Python程序中创建模块时,现在可以针对该模块的实例定制属性访问的行为。为此,只需要在模块里面创建一个__getattr__方法,就跟为一个类创建方法那样。这样一来,就可以对诸如请求模块里面不存在的函数或方法之类的操作进行拦截、标记或代理。

Python importlib资源

importlib模块现在可用来读取“资源”,即随Python应用程序一并交付的二进制工件,比如数据文件。这样一来,开发人员可以通过importlib的抽象来访问那些文件,所以它们存储在系统上某个地方的.zip文件中还是存储在目录中并不重要。

底层优化

现在许多单独的操作更快速了:

由于新的操作码,方法调用起来最多快20%。(除非你在编写直接处理Python操作码的代码,否则不需要担心由此带来的影响。)

正则表达式中不区分大小写的匹配速度更快了,有时要快20倍。

源代码中的一些常量现在可以更高效地优化。