糟了!Python3.7.0 来了

导言

美国时间6月27日晚8点,Python 3.7.0 经过多轮测试,终于发布了正式版,增强了多处特性功能,同时 3.6 也更新到 3.6.6 稳定版本。

编辑: Amusi

校稿: Amusi

时间: 2018-07-08

前戏

打开Python官网,翻到 Lastet News,引入眼帘的就是 Python 3.7.0 is now available (and so is 3.6.6)! On behalf of ...

注:文末有福利

link: https://www.python.org/

让我们看一下官方是怎么介绍这一爆炸性事件的...

Wednesday, June 27, 2018 Python 3.7.0 is now available (and so is 3.6.6)! On behalf of the Python development community and the Python 3.7 release team, we are pleased to announce the availability of Python 3.7.0. Python 3.7.0 is the newest feature release of the Python language, and it contains many new features and optimizations. You can find Python 3.7.0 here: https://www.python.org/downloads/release/python-370/ Most third-party distributors of Python should be making 3.7.0 packages available soon. See the What’s New In Python 3.7 document for more information about features included in the 3.7 series. Detailed information about the changes made in 3.7.0 can be found in its change log. Maintenance releases for the 3.7 series will follow at regular intervals starting in July of 2018. We hope you enjoy Python 3.7! P.S. We are also happy to announce the availability of Python 3.6.6, the next maintenance release of Python 3.6: https://www.python.org/downloads/release/python-366/ Thanks to all of the many volunteers who help make Python Development and these releases possible! Please consider supporting our efforts by volunteering yourself or through organization contributions to the Python Software Foundation.

简单来说就是,Python3.7.0正式发布,大家可以下载使用,其官方文档也已经发布,其中Python3.7.0版本加入了很多新功能和优化。与此同时,官方也发布了Python3.6.6

Python3.7.0

那么Python3.7.0到底加入了哪些特性,让它如此与众不同呢?来继续往下看

主要特性

  • PEP 539,新增 CPython 中用于线程本地存储的 C-API
  • PEP 545,Python 官方文档翻译版本,新增日文、法文、韩文
  • PEP 552,优化 pyc 文件
  • PEP 553,新增内置函数 breakpoint() ,该函数在调用时自动进入调试器
  • PEP 557,新增内置模块dataclasses,可大幅简化类实例属性的初始化定义
  • PEP 560,新增支持类型模块和泛型
  • PEP 562,支持在模块定义 __getattr____dir__
  • PEP 563,推迟对注释语句的分析从而优化 Python 的类型提示
  • PEP 564,time 内置函数支持纳秒
  • PEP 565,重新在 __main__ 中默认显示 DeprecationWarning
  • PEP 567,新增 contextvars模块,可实现上下文变量解决变量线程安全
  • 避免使用 ASCII 作为默认文本编码,强制 UTF-8 编码运行
  • 字典对象的 keys 按插入顺序排列,现在是官方语言规范
  • 多方面的显著性能优化

说这么多特性,不如举个例子吧!

这里搬运知乎大佬“口可口可”的介绍(如有侵权,立即删除)

dataclasses模块 示例

这个特性可能是 3.7.0 以后比较常用的了,是从其他语言借鉴过来的,这里简单演示下用法。

假如我们要封装一个类对象,在之前我们的代码可能要这么写:

 1class Article(object):
 2    def __init__(self, _id, author_id, title, text, tags=None, 
 3                 created=datetime.now(), edited=datetime.now()):
 4    self._id = _id
 5    self.author_id = author_id
 6    self.title = title
 7    self.text = text
 8    self.tags = list() if tags is None else tags
 9    self.created = created
10    self.edited = edited
11
12    if type(self.created) is str:
13       self.created = dateutil.parser.parse(self.created)
14
15    if type(self.edited) is str:
16       self.edited = dateutil.parser.parse(self.edited)
17
18    def __eq__(self, other):
19        if not isinstance(other, self.__class__):
20            return NotImplemented
21        return (self._id, self.author_id) == (other._id, other.author_id)
22
23    def __lt__(self, other):
24        if not isinstance(other, self.__class__):
25            return NotImplemented
26        return (self._id, self.author_id) < (other._id, other.author_id)
27
28    def __repr__(self):
29        return '{}(id={}, author_id={}, title={})'.format(
30                self.__class__.__name__, self._id, self.author_id, self.title)

大量的初始化属性要定义默认值,可能还需要重写一堆魔法方法,来实现类实例之间的排序 去重 等功能。

如果使用dataclass进行改造,可以写成这个样子:

 1@dataclass(order=True)
 2class Article(object):
 3    _id: int
 4    author_id: int
 5    title: str = field(compare=False)
 6    text: str = field(repr=False, compare=False)
 7    tags: List[str] = field(default=list(), repr=False, compare=False)
 8    created: datetime = field(default=datetime.now(), repr=False, compare=False)
 9    edited: datetime = field(default=datetime.now(), repr=False, compare=False)
10
11    def __post_init__(self):
12       if type(self.created) is str:
13           self.created = dateutil.parser.parse(self.created)
14
15       if type(self.edited) is str:
16           self.edited = dateutil.parser.parse(self.edited)

可见这种语法使代码更加简练清晰,也更符合面向对象思想的语法方式,用过 SQLAlchemy 的同学肯定觉得很像 ORM 写法。

上述示例只是最基础的展示,更丰富的用法可以查看PEP 557文档。

Python3.7.0 下载和在线文档

Python3.7.0下载

打开下载地址,哇!已经支持MacOS和Windows,估计Linux也快了!

不过Amusi更好奇Anaconda有没有推出集成Python3.7.0的软件包

https://www.python.org/downloads/release/python-370/

Python3.7.0 在线文档

打开Python3.7.0 在线文档,新特性介绍、教程和安装模块等一网打尽,Python的社区维护真的相当好

https://docs.python.org/3/

Amusi 作为还在使用Python2.7和Python3.5的程序猿,其实感到很开森,新版本无疑更强大更优化,大家也快更新代码~适应新环境

原文发布于微信公众号 - CVer(CVerNews)

原文发表时间:2018-07-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端技术探索

反射机制、依赖注入、控制反转

反向: dll->类[方法,属性]. 从已经有的dll文件反编译得到其中的一些可用的方法.

10020
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版4.2节函数的逆向之顺序结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

6710
来自专栏晨星先生的自留地

面试中碰到的坑之注入系列(2)

21350
来自专栏PHP在线

给PHP开发者讲讲PHP源码-第一部分

作为一个开发者,我发现在我的日常工作中越来越多地查看PHP的源码。在为了弄清楚奇怪的边界问题和为什么某些问题应该发生的却没有发生而去理解背后究竟发 生了什么事情...

594100
来自专栏IMWeb前端团队

node中常见的10个错误

非原创,格式不太整齐。 错误 #1:阻塞事件循环 JavaScript在 Node.js (就像在浏览器一样) 提供单线程执行环境。这意味着你的程序不能同时执行...

28260
来自专栏安恒网络空间安全讲武堂

小白详解rop emporium

rop emporium网站上提供了许多构造rop的challenge,作为小白的我从这里开始,专注于rop链的构造。

51730
来自专栏安恒网络空间安全讲武堂

typecho漏洞分析与HCTF实战

typecho漏洞分析与HCTF实战 0x00前记 通过最近的比赛,决定沉淀下来,从复现cms开始慢慢锻炼自己的审计能力,毕竟这个年头的CTF,不会审计只能活在...

27180
来自专栏企鹅号快讯

8行代码实现ui文件到py文件转换

在用PyQt进行GUI编程时,一般先通过Qt Designer产生后缀为.ui的UI文件(类似于XML文件),接着将.ui文件转换成.py文件,再通过一个pyt...

30080
来自专栏Kirito的技术分享

深入理解RPC之动态代理篇

提到 JAVA 中的动态代理,大多数人都不会对 JDK 动态代理感到陌生,Proxy,InvocationHandler 等类都是 J2SE 中的基础概念。动态...

600120
来自专栏安恒信息

一次开发的意外逆向之旅

笔者最近从事windows内核开发的时候因为功能需要,所以需要对PspSetCreateProcessNotifyRoutine回调函数数组进行遍历,于是笔者照...

16610

扫码关注云+社区

领取腾讯云代金券