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中requests模块的使用方法
Apr 08 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
python中PIL安装简单教程
Apr 21 Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 Python
Python实现Pig Latin小游戏实例代码
Feb 02 Python
全面分析Python的优点和缺点
Feb 07 Python
利用python如何处理nc数据详解
May 23 Python
使用Python实现在Windows下安装Django
Oct 17 Python
Python基础教程之异常详解
Jan 10 Python
python实现kmp算法的实例代码
Apr 03 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
python 实现体质指数BMI计算
May 26 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中substr()函数参数说明及用法实例
2014/11/15 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
Python中@property的理解和使用示例
2019/06/11 Python
pytorch构建多模型实例
2020/01/15 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
酒店节能减排方案
2014/05/26 职场文书
百日安全生产活动总结
2014/07/05 职场文书
员工培训协议书
2014/09/15 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
出国签证在职证明范本
2014/11/24 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
被告代理词范文
2015/05/25 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
MySQL去除密码登录告警的方法
2022/04/20 MySQL