您的位置:首页 > 编程语言 > Python开发

Python 3.6.0 正式版发布附新特性详解

2016-12-25 11:15 911 查看








昨天,在知乎专栏发布了一篇文章,简单翻译介绍了一下Python 3.6的发布以及一些新特性的简单说明,今天将会在这些新特性进行一个略详细的解答!

此篇文章详细揭示了Python3.6中的新特性,Python3.6于2016.12.23正式发布,你可以点击进入官方文档查看完整的变化日志。

总结

看点
01
新的语法特性

PEP 498,格式化字符串变量

PEP 515,数字变量使用下划线

PEP 526, 给变量添加注释的语法

PEP 525, 异步生成器

PEP 530,异步推导

看点
02
新的库模板

secrets: PEP 506 – Adding A Secrets Module To The Standard Library.

看点
03
CPython的一些改进

重新实现了字典dict,使其更加紧凑,像是PyPy中的实现。此次重新实现的dict比Python3.5中的字典内存使用减少了20%-25%

定制类的创建使用 new protocol 进行了简化

类中各个属性定义的顺序现在是被保存的 now preserved.

双星号变量**kwargs中的元素的顺序是你传入函数中的元素的顺序

添加了DTrace和SystemTap探测支持。

新的PYTHONMALLOC环境变量现在可用于调试解释器内存分配和访问错误。

看点
04
标准库的重大改进

asyncio模板添加了很多新的功能、重要的可用性、性能改进以及大量的bug,从Python3.6开始 asyncio模板不再是临时的并且API变得更加稳定

一个新的文件系统路径协议file system path protocol已经产生来支持 path-like objects,标准库中所有的文件路径操作已经被更新到使用新的协议

datetime模板现在已经支持 Local Time Disambiguation

typing模板进行了很多的改进

tracemalloc模板进行了大幅度的改进,现在用来为ResourceWarning提供更好的输出、以及为内存分配错误提供更好的诊断。

看点
05
安全性的提高

添加了新的模板secrets以简化使用于管理密码,比如账号认证,令牌等的密码的随机数的生成

在Linux OS中,os.urandom()现在阻塞,直到系统urandom熵池被初始化以增加安全

hashlib和ssl 模板现在已经支持OpenSSL 1.1.0.

ssl 模板中的默认设置和功能现在已经被改进了

模板现在新增了对BLAKE2, SHA-3 and SHAKE的哈希算法以及scrypt()密钥导出函数的支持

重点
新变化

PEP 498, 格式化字符串变量  
引入了一种新的字符串字变量:f-strings,与原来的方法str.format()类似。他们包含由大括号括起来的字段,大括号表达式中的变量可以动态的进行赋值,操作会更加的方便。原理上f-strings最后仍然会调用format()来进行格式化。



PEP 515, 数字变量使用下划线  
添加了数字中可以使用下划线来提高可读性的能力,当然在数字之间或者任何基本说明之后可以使用单个下划线。但是请注意:不可以在开头结尾或者中间使用多个下划线!

并且上述所说的格式化字符串变量也支持下划线,它会自动的对每一个千位加上一个下划线,有点我们平常金额计数的意思。对于'b','o','x','X'等进制整数类型表示,它将会对每四位之间添加一个下划线。



PEP 526, 给变量添加注释的语法  
引入了函数参数类型的注释标准,此PEP向Python添加了用于注释变量类型包含类变量和实例变量的语法,如下。



与函数注释一样,Python解释器不会对变量注释附加任何特定含义,只将它们存储在类或模块的__annotations__属性中。

与静态类型语言中的变量声明相反,注释语法的目标是通过抽象语法树和__annotations__属性为第三方工具和库指定结构化类型元数据的简单方法。

这一步,可以说是借鉴了其他语言的用法,对于个人用户来说,一方面会减少代码的出错率,另一方面增加了写代码时候的复杂度。

PEP 525, 异步生成器  
对于异步,我们知道在Python3.5中一个显著的问题是:Python 3.5实现的一个显着的局限性是,不可能在同一个函数体中使用await和yield。现在在Python3.6中,这个限制已经移除了,你可以自由的定义异步生成器了。



新的特性可以使代码更加的快速和简洁,方便多了

PEP 530: 异步推导  
添加了在list,set,dict comprehension和generator表达式中使用async的支持
此外,所有comprehensions中都支持await表达式



PEP 487 – 类创建的更简单的定义  
现在你可以在不使用元类的情况下自定义子类,新的__init_subclass__类方法将在你每次创建一个新的子类的时候被调用。

不懂元类的,可以到我专栏的之前一篇关于元类详解的文章中去详细了解一下!



描述符的实例现在可以知道所有者类中的描述符的属性名称:



更多更加详细的变化,请移步官方文档!
最后,如果你还没有升级到3.x的赶紧升级起来!
你可以点击这一篇进行升级!
Python3.x基础学习资料整理

那么,你最期待哪些新特性呢?



周六周天可都毁在翻译上了!
赞赏

人赞赏
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: