Python3.6新特性(部分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36485376/article/details/81557877

概览

Python3.6.0于2016年12月23日发布,与3.5版本相比,添加了以下新特性,详情请看python3.6发布日志

新的语法特性:

  • 格式化字符串字面值
  • 数字字符串中支持下划线
  • 变量注释的语法
  • 异步生成器
  • 异步列表推导

新的模块

添加了一个安全模块secrets到标准库中

CPython实现改进

  • 字典基于Raymond Hettinger的建议使用更紧凑的表示重新实现了,和PyPy的字典实现类似。结果是和3.5版本相比,3.6版本字典的内存使用减少了20%到25%。
  • 使用新的协议,自定义类的创建被简化了。
  • 类属性的定义顺序能够被保存。
  • 现在**kwargs中元素的顺序对应于传递给函数时的关键字参数的顺序。
  • 添加了DTrace和SystemTap探测的支持。
  • 新的PYTHONMALLOC环境变量可以用于调试解释器内存分配和访问错误。

重大的标准库改进

  • asyncio模块接收了新特性,重大的可用性和性能改进,然后修复了大量的BUG。从Python 3.6开始asyncio模块不再是临时的了,它已经被认为是稳定的了。
  • 新的文件系统路径协议已实现,用于支持路径类对象。所有标准库函数在处理路径时已使用新的协议。
  • datetime模块在本地时间消除歧义上获得了支持。
  • typing模块接受了一些改进。
  • tracemalloc模块经过重大改造,现在可以为ResourceWarnning提供更好的输出,也为内存分配错误提供更好的诊断。

安全改进

  • secrets模块已被添加,可以生成更安全的伪随机数。
  • 在Linux上,os.urandom()现在会被锁住,直到系统的伪随机滴池被初始化增加安全。
  • hashlib和ssl模块现在支持OpenSSL 1.1.0。
  • hashlib模块现在支持BLAKE2、SHA-3和SHAKE摘要算法和scrypt()秘钥导出功能。

Windows改进

  • Windows文件系统和控制台编码改为了UTF-8。
  • python.exe和pythonw.exe现在支持长路径,详情请看removing the MAX_PATH limitation
  • 一个._pth文件可以被添加用于隔离模块,避免全路径搜索,详情请看文档

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'

数字中支持下划线

数字中支持使用下划线,方便阅读,例如:

>>> 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'

变量注释语法

变量注释没有给变量带来特殊的意义,只是为了方便IDE做类型检查。

>>> from typing import List,Dict
>>> primes: List[int] = []
>>> stats: Dict[str, int] = {}

上面代码中primes为变量名,List[int]为变量注释,用来说明primes列表是用来存放int类型数据的,但是这个不是强制性的,你使用append()方法添加一个str类型数据也是可以的,IDE会提示你添加的数据有误,但是运行时不会报错。

异步生成器

在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)

异步列表推导

增加在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]

猜你喜欢

转载自blog.csdn.net/weixin_36485376/article/details/81557877
今日推荐