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使用cookie库操保存cookie详解
Mar 03 Python
Python删除指定目录下过期文件的2个脚本分享
Apr 10 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 Python
python在线编译器的简单原理及简单实现代码
Feb 02 Python
Python 实现两个列表里元素对应相乘的方法
Nov 14 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
详解python运行三种方式
May 13 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
python实现数字炸弹游戏
Jul 17 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
pandas中pd.groupby()的用法详解
Jun 16 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实现的九九乘法口诀表简洁版
2014/07/28 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
详解django中使用定时任务的方法
2018/09/27 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Jupyter加载文件的实现方法
2020/04/14 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
美发活动策划书
2014/01/14 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
小学运动会开幕词
2015/01/28 职场文书
社区服务活动报告
2015/02/05 职场文书
自荐信怎么写
2015/03/04 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
React列表栏及购物车组件使用详解
2021/06/28 Javascript
为什么RedisCluster设计成16384个槽
2021/09/25 Redis