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装饰器探究与参数的领取
Dec 01 Python
Django实战之用户认证(用户登录与注销)
Jul 16 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 Python
python 调用js的四种方式
Apr 11 Python
Python函数对象与闭包函数
Apr 13 Python
python实现学员管理系统(面向对象版)
Jun 05 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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
Python中Selenium模块的使用详解
2020/10/09 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
放假通知
2015/04/14 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
Python实现单例模式的5种方法
2021/06/15 Python
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang