Python 3.7的新特性

Python 3.7为数据处理、脚本编译和垃圾收集优化以及更快的异步I/O添加了许多新类。
python是一种旨在简化复杂任务的语言。python 3.7的最新版本已经正式休闲鹿进入beta发布阶段。Python3.7的最终版本将于2018年6月发布,但之后Python3.7将不再增加新功能。
python 3.7最重要的新增和改进如下:
使用类时减少样板代码中的数据类数。
可能不向后兼容的更改涉及处理生成器中的异常。
面向解释器的“开发模式”。
具有纳秒分辨率的时间对象。


环境中默认使用utf-8编码的utf-8模式。
触发调试器的新内置函数。
Python数据类
众所周知,Python是处理结构化数据的一种快捷方便的方法python提供类来组织管理结构并将常见行为与数据实例关联起来,但是具有许多初始值设定项的类有一个长期的缺点:它们需要大量样板代码来创建。

所以生成的类就像一个普通的Python类一样运行您还可以声明某些字段是“冻结”或不可变的,并自动(或手动重写)创建属性的特殊方法,例如“hash”或“repr.”。
Python生成器异常处理
如PEP 479(https://www.python.org/dev/peps/PEP-0479/)所述,随着时间的推移,开发了一个更改,使人们更容易调试python生成器引发的stopiteration异常以前,生成器在遇到另一个问题时很容易导致停止迭代,而不是因为它没有要迭代的内容这会导致一大堆难以跟踪的代码缺陷。
在Python3.7中,在生成器抛出StopIteration异常之后,StopIteration异常将被转换为Runtimeerror异常,这样它就不会悄悄地影响应用程序的堆栈框架。这意味着一些对如何处理生成器行为不太敏感的程序会在Python3.7中抛出运行时错误。在Python3.6中,此行为生成一个不推荐警告;在Python3.7中,它生成一个完整的错误。
一个简单的方法是在传播stopiteration时使用try/except代码片段将其捕获到生成器外部一个更好的解决方案是重新思考如何构建生成器——例如,使用return语句终止生成器,而不是手动引发stopIteration。要了解更多关于如何在现有代码中修复此问题以及如何在新代码中防止该问题,请参见PEP 469(http://www. Python .org/DEV/PEPS/PEP-079/)。
python开发模式
python解释器的新命令行开关:-x允许开发人员为解释器设置许多低级选项。在Python3.7中,选项-x dev启用“开发模式”,这是一种运行时检查机制,通常对性能有重大影响,但在调试期间对开发人员很有用。
-X dev激活选项包括:
异步模块的调试模式这为异步操作提供了更详细的日志记录和异常处理,这些操作可能很难调试或推理。
内存分配器的调试挂钩。这对于编写cpython扩展的人很有用。它允许更清晰的运行时检查来查看Cpython如何在内部分配和释放内存。
启用faulthandler模块,以便在崩溃后始终转储回溯。
纳秒分辨率的python时间函数
python 3.7中的一种新型时间函数以纳秒精度返回时间值。尽管python是一种解释性语言,但python的核心开发人员victor stinner提倡报告纳秒级精度的时间。主要原因是,在处理转换其他程序(如数据库)记录的时间值时,可以避免丢失精度。
新的时间函数使用后缀“ns”。例如,纳秒时间。过程?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与周围环境进行所有交互。
内置断点()函数
Python附带了一个内置的调试器,但它也可以连接到第三方调试工具,只要它们可以与Python的内部调试API进行对话然而,到目前为止,python还缺乏一种标准化的方法来从python应用程序中以编程方式触发调试器。
python 3.7添加了breakpoint(),这是一个内置函数,允许在调用函数时执行切换到调试器。相应的调试器不一定是python自己的pdb,它可以是先前设置为首选调试器的任何调试器。在过去,调试器必须手动设置和调用,这使得代码更加冗长。使用breakpoint(),您可以只使用一个命令调用调试器,并在设置调试器和调用调试器之间明确说明。
其他新的Python3.7特性
Python3.7还有许多其他的变化。以下是使用最新版本的Python时可能遇到的一些其他功能:
线程本地存储支持的C-API
如PEP 539(https://www.python.org/dev/peps/PEP-0539/)所述,线程特定存储(TSS)API取代了旧的。

猜你喜欢

转载自www.cnblogs.com/blogst/p/11781480.html