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实现socket客户端和服务端简单示例
Feb 24 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
Python fileinput模块使用实例
Jun 03 Python
python对象及面向对象技术详解
Jul 19 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
Python OS模块实例详解
Apr 15 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
Python实现名片管理系统
Feb 14 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
golang中的空接口使用详解
Mar 30 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
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
导师评语大全
2014/04/26 职场文书
学校花圃的标语
2014/06/18 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
承诺书样本
2014/08/30 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
公司股份合作协议书
2014/12/07 职场文书
个人总结格式范文
2015/03/09 职场文书
用python修改excel表某一列内容的操作方法
2021/06/11 Python
Java数据结构之堆(优先队列)
2022/05/20 Java/Android