Python3.6正式版新特性预览


Posted in Python onDecember 15, 2016

按照Python官网上的计划,Python3.6正式版期望在2016-12-16号发布,也就是这周五。从去年的5月份开始,Python3.6版本就已经动手开发了,期间也断断续续的发布了4个Alpha版,4个Beta版,以及一个Candidate版本。

作为一个Python爱好者,很期待新版本的发布,也希望能第一时间尝试一下新特性。本文就根据Python官网文章What's New In Python 3.6,简单介绍下Python3.6中的一些新特性。

如果你想尝试Python3.6,又不想破坏本机的Python环境,建议使用Docker。如果不会使用Docker,可以看下这里  https://3water.com/article/94198.htm

新的语法特性

1、格式化字符串(Formatted string literals)

即在普通字符串前添加 f 或 F 前缀,其效果类似于str.format()。比如

name = "Fred"
print(f"He said his name is {name}.") # 'He said his name is Fred.'

其效果相当于:

print("He said his name is {name}.".format(**locals()))

此外,此特性还支持嵌套字段,比如:

width = 10
precision = 4
value = decimal.Decimal("12.34567")
print(f"result: {value:{width}.{precision}}") #'result:   12.35'

2、变量声明语法(variable annotations)

即从Python3.5开始就有的Typehints。在Python3.5中,是这么使用的:

from typing import List

def test(a: List[int], b: int) -> int:
  return a[0] + b

print(test([3, 1], 2))

这里的语法检查只在编辑器(比如Pycharm)中产生,在实际的使用中,并不进行严格检查。

在Python3.6中,引入了新的语法:

from typing import List, Dict

primes: List[int] = []
captain: str  # 此时没有初始值

class Starship:
  stats: Dict[str, int] = {}

3、数字的下划线写法(Underscores in Numeric Literals)

即允许在数字中使用下划线,以提高多位数字的可读性。

a = 1_000_000_000_000_000    # 1000000000000000
b = 0x_FF_FF_FF_FF       # 4294967295

除此之外,“字符串格式化”也支持“_”选项,以打印出更易读的数字字符串:

'{:_}'.format(1000000)     # '1_000_000'
'{:_x}'.format(0xFFFFFFFF)   # 'ffff_ffff'

4、异步生成器(Asynchronous Generators)

在Python3.5中,引入了新的语法 async 和 await 来实现协同程序。但是有个限制,不能在同一个函数体内同时使用 yield 和 await,在Python3.6中,这个限制被放开了,Python3.6中允许定义异步生成器:

async def ticker(delay, to):
"""Yield numbers from 0 to *to* every *delay* seconds."""
  for i in range(to):
    yield i
    await asyncio.sleep(delay)

5、异步解析器(Asynchronous Comprehensions)

即允许在列表list、集合set 和字典dict 解析器中使用 async for 或 await 语法。

result = [i async for i in aiter() if i % 2]
result = [await fun() for fun in funcs if await condition()]

新增加模块

Python标准库(The Standard Library)中增加了一个新的模块:secrets。该模块用来生成一些安全性更高的随机数,以用来管理数据,比如passwords, account authentication, security tokens, 以及related secrets等。具体用法可参考官方文档:secrets

其他新特性

1、新的 PYTHONMALLOC 环境变量允许开发者设置内存分配器,以及注册debug钩子等。

2、asyncio模块更加稳定、高效,并且不再是临时模块,其中的API也都是稳定版的了。

3、typing模块也有了一定改进,并且不再是临时模块。

4、datetime.strftime 和 date.strftime 开始支持ISO 8601的时间标识符%G, %u, %V。

5、hashlib 和 ssl 模块开始支持OpenSSL1.1.0。

6、hashlib模块开始支持新的hash算法,比如BLAKE2, SHA-3 和 SHAKE。

7、Windows上的 filesystem 和 console 默认编码改为UTF-8。

8、json模块中的 json.load() 和 json.loads() 函数开始支持 binary 类型输入。

9、.......

还有很多其他特性,但在平时工作中能用到的大概就这么多了。有兴趣的读者可以直接参考官方文档:What's New In Python 3.6

Python 相关文章推荐
Python中的装饰器用法详解
Jan 14 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
Flask框架Flask-Login用法分析
Jul 23 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
numpy基础教程之np.linalg
Feb 12 Python
Python绘制频率分布直方图的示例
Jul 08 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
python3实现单目标粒子群算法
Nov 14 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
May 26 Python
再谈Python中的字符串与字符编码(推荐)
Dec 14 #Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 #Python
你所不知道的Python奇技淫巧13招【实用】
Dec 14 #Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 #Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 #Python
从零开始学Python第八周:详解网络编程基础(socket)
Dec 14 #Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 #Python
You might like
PHP 引用是个坏习惯
2010/03/12 PHP
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
js 操作符汇总
2014/11/08 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
Python通过future处理并发问题
2017/10/17 Python
flask框架视图函数用法示例
2018/07/19 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
英语教育专业毕业生求职信
2014/08/28 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
老龙头导游词
2015/02/11 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
交通安全教育心得体会
2016/01/15 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android