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实现中文分词FMM算法实例
Jul 10 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
Jul 04 Python
python获取list下标及其值的简单方法
Sep 12 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 Python
python 常用的基础函数
Jul 10 Python
python 正确保留多位小数的实例
Jul 16 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
Python读取xlsx文件的实现方法
Jul 04 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
Jan 25 Python
python绘制高斯曲线
Feb 19 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 session会话的安全性分析
2011/09/08 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
javascript制作2048游戏
2015/03/30 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
Python探索之URL Dispatcher实例详解
2017/10/28 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
python实现与redis交互操作详解
2020/04/21 Python
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
文秘大学生求职信
2014/02/25 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
运动会运动员赞词
2015/07/22 职场文书
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python