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协程用法实例分析
Jun 04 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
python递归查询菜单并转换成json实例
Mar 27 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
Python二进制串转换为通用字符串的方法
Jul 23 Python
python儿童学游戏编程知识点总结
Jun 03 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
Pytorch十九种损失函数的使用详解
Apr 29 Python
Python如何执行精确的浮点数运算
Jul 31 Python
Python接口自动化之文件上传/下载接口详解
Apr 05 Python
Python基本知识点总结
Apr 07 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
深入了解php4(2)--重访过去
2006/10/09 PHP
基于empty函数的判断详解
2013/06/17 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
JScript的条件编译
2007/05/29 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
基于javascript实现碰撞检测
2020/03/12 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
公司募捐倡议书
2014/05/14 职场文书
庐山导游词
2015/02/03 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
股权投资协议书
2016/03/23 职场文书
mysql部分操作
2021/04/05 MySQL
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL