本文介绍了 Python 3.6 中与 3.5 相比的新功能。Python 3.6于2016年12月23日发布。有关完整的详细信息,请参阅更新日志。
新的语法功能:
PEP 498:格式化字符串文本
>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}" # nested fields
'result: 12.35'
PEP 526:变量注释的语法
primes: List[int] = []
captain: str # Note: no initial value!
class Starship:
stats: Dict[str, int] = {}
PEP 515:数字文本中的下划线
>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295
# 语言现在还支持以下选项,
# 以指示对浮点表示类型和整数表示类型使用千位分隔符的下划线。
# 对于整数表示类型, 、 和 ,
# 将每 4 位插入一次下划线:`'_'``'d'``'b'``'o'``'x'``'X'`
>>> '{:_}'.format(1000000)
'1_000_000'
>>> '{:_x}'.format(0xFFFFFFFF)
'ffff_ffff'
PEP 525: 异步发电机
为 Python 3.5 引入了对本机协程和 /语法的支持。Python 3.5实现的一个显着限制是它不可能在同一个函数体中使用。在Python 3.6中,这个限制已经解除,使得定义异步生成器成为可能:async await await yield
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)
PEP 530:异步推导
# 增加了对在列表、集合、字典推导和生成器表达式中使用的支持:async for
result = [i async for i in aiter() if i % 2]
# 此外,表达式在各种推导式中都受支持:await
result = [await fun() for fun in funcs if await condition()]
新增模块
secrets (机密)
secrets
模块可用于生成高加密强度的随机数,适应管理密码、账户验证、安全凭据和相关机密数据管理的需要
# 返回一个 [0, n) 范围之内的随机整数。
>>> secrets.randbelow(100)
15
应当优先使用 secrets 来替代 random 模块中默认的伪随机数生成器,后者被设计用于建模和仿真,而不适用于安全和加密。
警告请注意,random 模块中的伪随机生成器不应用于安全目的。在 Python 3.6+ 上使用 secrets,在 Python 3.5 及更早版本上使用 os.urandom()
其他新特性
新的 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 类型输入。
网友评论