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使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
在Python中操作字典之clear()方法的使用
May 21 Python
深入解析Python中的list列表及其切片和迭代操作
Mar 13 Python
Python 性能优化技巧总结
Nov 01 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
Python实现一个服务器监听多个客户端请求
Apr 12 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
python+opencv3生成一个自定义纯色图教程
Feb 19 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
Python SMTP发送电子邮件的示例
Sep 23 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中array_map与array_column之间的关系分析
2014/08/19 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
javascript 获取函数形参个数
2014/07/31 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
Node.js实现文件上传
2016/07/05 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
浅谈$('div a') 与$('div>a')的区别
2016/07/18 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
浅谈js闭包理解
2019/03/28 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
Python使用pickle模块存储数据报错解决示例代码
2018/01/26 Python
Django中使用Celery的方法示例
2018/11/29 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
python实例化对象的具体方法
2020/06/17 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
优秀应届毕业生推荐信
2014/02/18 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
活动总结报告范文
2014/05/04 职场文书
护士求职信范文
2014/05/24 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
师范生见习报告
2014/10/31 职场文书
办公室岗位职责
2015/02/04 职场文书
2016年教师新年寄语
2015/08/18 职场文书
python中%格式表达式实例用法
2021/06/18 Python
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers