详解python3.6正式版新特性

按照python官网上的计划,python3.6正式版期望在2016-12-16号发布,也就是这周五。从去年的5月份开始,python3.6版本就已经动手开发了,期间也断断续续的发布了4个alpha版,4个beta版,以及一个candidate版本。新的语法特性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 类型输入。

以上就是详解python3.6正式版新特性的详细内容,更多请关注 第一php社区 其它相关文章!

Posted in 未分类