前言
很多人在学习了基本的Python语言知识后,就转入应用阶段了,没有对Python语言本身的新变化、新内容加以更新,甚至连已经发布了好几年的Python3.6的新特性都不甚了解,所以会感觉越来越吃力。
今天我们列举了Python3.6、3.7、3.8三个版本的新特性,希望能对大家更好的应用Python有所帮助。
一、Python3.6新特性
1、Formatted字符串字面值
Formatted字符串是带有’f’字符前缀的字符串,可以很方便的格式化字符串。
>>> name = "xiaoming"
>>> f"He name is {name}"
'He name is xiaoming'
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}"
'result: 12.35'
2、数字中支持下划线
数字中支持使用下划线,方便阅读,例如:
>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295
字符串format方法也支持了’_’选项,当格式化为浮点数或整数时,以3位分隔,当格式化为’b’,’o’,’x’和’X’时,以4位分隔
>>> '{:_}'.format(10000000)
'10_000_000'
>>> '{:_b}'.format(10000000)
'1001_1000_1001_0110_1000_0000'
3、变量注释语法
变量注释没有给变量带来特殊的意义,只是为了方便IDE做类型检查。
>>> from typing import List,Dict
>>> primes: List[int] = []
>>> stats: Dict[str, int] = {}
上面代码中primes为变量名,List[int]为变量注释,用来说明primes列表是用来存放int类型数据的,但是这个不是强制性的,你使用append()方法添加一个str类型数据也是可以的,IDE会提示你添加的数据有误,但是运行时不会报错。
4、异步生成器
在Python3.5中,await和yield不能再同一个函数中使用,但是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、异步列表推导
增加在list、set和dict的列表推导和生成表达式中使用async for。
如下面这段代码
result = []
async for i in aiter():
if i % 2:
result.append(i)
使用异步推导式之后,可以简写成
result = [i async for i in aiter() if i % 2]
现在也支持在所有的推导式中使用await表达式
result = [await fun() for fun in funcs]
6、新增加模块
标准库(The Standard Library)中增加了一个新的模块:secrets
。该模块用来生成一些安全性更高的随机数,用于管理passwords, account authentication, security tokens, 以及related secrets等数据。
7、其他新特性
- 新的 PYTHONMALLOC 环境变量允许开发者设置内存分配器,以及注册debug钩子等。
- asyncio模块更加稳定、高效,并且不再是临时模块,其中的API也都是稳定版的了。
- typing模块也有了一定改进,并且不再是临时模块。
- datetime.strftime 和 date.strftime 开始支持ISO 8601的时间标识符%G, %u, %V。
- hashlib 和 ssl 模块开始支持OpenSSL1.1.0。
- hashlib模块开始支持新的hash算法,比如BLAKE2, SHA-3 和 SHAKE。
- Windows上的 filesystem 和 console 默认编码改为UTF-8。
- json模块中的 json.load() 和 json.loads() 函数开始支持 binary 类型输入。
二、Python3.7新特性
Python 3.7于2018年6月27日发布, 包含许多新特性和优化,增添了众多新的类,可用于数据处理、针对脚本编译和垃圾收集的优化以及更快的异步I/O,主要如下:
- 用类处理数据时减少样板代码的数据类。
- 一处可能无法向后兼容的变更涉及处理生成器中的异常。
- 面向解释器的“开发模式”。
- 具有纳秒分辨率的时间对象。
- 环境中默认使用UTF-8编码的UTF-8模式。
- 触发调试器的一个新的内置函数。
1、新增内置函数breakpoint()
使用该内置函数,相当于通过代码的方式设置了断点