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实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
Python的re模块正则表达式操作
May 25 Python
python图片验证码生成代码
Jul 02 Python
python爬取NUS-WIDE数据库图片
Oct 05 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
详解Python 函数参数的拆解
Sep 02 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 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实时显示输出
2008/10/02 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
php设计模式之单例模式代码
2016/06/11 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
php根据命令行参数生成配置文件详解
2019/03/15 PHP
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
python3基于TCP实现CS架构文件传输
2018/07/28 Python
Python 忽略warning的输出方法
2018/10/18 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
解决python运行启动报错问题
2020/06/01 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
工业学校毕业生自荐信范文
2014/01/03 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
公司员工活动策划方案
2014/08/20 职场文书
争先创优个人总结
2015/03/04 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫