Python 3.6 新特性一窥

Python3.6 在2016.12.23正式发布。发布一年多了,现在最新版本是3.6.4。
3.6是Python的一个重要版本,巩固和新增了很多Python 3.x 的新特性。


机器上安装了最新的Python 3.6.4 作为学习的Python版本已经有一两个月了。可以体验最新最全的Python特性,3.6的新特性很多,足够玩很久了。

最完整的Python 3.6.x的更新日志说明地址在这

很长很详细地的更新文档。大概浏览了一遍,找时间再详细地学习。

网上有人简单地总结列举了一些特性,中文的可以参照知乎的这篇文章

Python 3.6除了各方面的性能提升外,还新增了模块如安全加密模块secrets,异步库asyncio也更新了不少内容、也更加稳定,类型语法标记的特性也更加丰富和强化了,等等。

概括而言,Python 3.x 始终忠于其设计哲学,同时紧跟时代的发展与需求。

越来越快,如重新实现了字典dict。此次重新实现的dict比Python3.5中的字典内存使用减少了20%-25%。字典是极其快速的,能用字典就得尽量用字典解决问题,字典是以牺牲空间换取时间,这次减少了这么多的内存占用,是很好的事!

越来越简洁的方向不变,如增加了新的格式化语法:

>>> 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'
>>> '{:_}'.format(1000000)
'1_000_000'
>>> '{:_x}'.format(0xFFFFFFFF)
'ffff_ffff'

越来越方便开发者,如新增的类型语法标记这个新特性,方便开发者检查和进行单元测试:

def my_add(a: int, b: int) -> int:
return a + b

from typing import TypeVar, Iterable, Tuple

T = TypeVar('T', int, float, complex)
Vector = Iterable[Tuple[T, T]]

def inproduct(v: Vector[T]) -> T:
return sum(x*y for x, y in v)
def dilate(v: Vector[T], scale: T) -> Vector[T]:
return ((x * scale, y * scale) for x, y in v)
vec = [] # type: Vector[float]

primes: List[int] = []
captain: str # Note: no initial value!
class Starship:
stats: Dict[str, int] = {}

越来越满足业界发展的趋势,如asyncio等异步编程特性的新增与完善,满足异步io编程的需求。

3.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)

# 异步推导
result = [i async for i in aiter() if i % 2]
result = [await fun() for fun in funcs if await condition()]