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中文乱码的解决方法
Nov 04 Python
python简单判断序列是否为空的方法
Jun 30 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
Python中断多重循环的思路总结
Oct 04 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
基于python求两个列表的并集.交集.差集
Feb 10 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
Python 解析简单的XML数据
Jul 24 Python
python实现一个简单RPC框架的示例
Oct 28 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
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
Python读写配置文件的方法
2015/06/03 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
python调用虹软2.0第三版的具体使用
2019/02/22 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Pycharm安装python库的方法
2020/11/24 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
家长对孩子的感言
2014/03/10 职场文书
科学育儿宣传标语
2014/10/08 职场文书
开场白怎么写
2015/06/01 职场文书
繁星春水读书笔记
2015/06/30 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
vue基于Teleport实现Modal组件
2021/05/31 Vue.js