# Python 3.5(2015/09/13) ## 新特性和改进 1. **异步编程:`async` 和 `await` 关键字**: - 引入了 `async` 和 `await` 关键字,用于简化异步编程。这些关键字使得定义和调用异步函数更加直观和简洁。例如: ```python async def fetch_data(): await some_async_function() ``` 2. **类型提示**: - 添加了对函数参数和返回值进行类型提示的功能,帮助开发者更好地理解代码的输入和输出。 - 这些标注可在运行时通过常用的 __annotations__ 属性来访问,但是 不会在运行时执行任何类型检查 - 需要有一个单独的离线版类型检查器 (例如 mypy) 被用来按需执行源代码分析 例如: ```python def greeting(name: str) -> str: return f"Hello, {name}" ``` 3. **PEP 465:矩阵乘法运算符 `@`**: - 引入了新的矩阵乘法运算符 `@`,用于执行矩阵乘法操作。例如: ```python import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) result = a @ b ``` 4. **PEP 448:扩展的解包通配符**: - 扩展了 * 可迭代对象解包操作符和 ** 字典解包操作符的允许使用范围 - 现在将可以在 函数调用 中使用任意数量的解包操作: ```python >>> print(*[1], *[2], 3, *[4, 5]) 1 2 3 4 5 >>> def fn(a, b, c, d): print(a, b, c, d) >>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4}) 1 2 3 4 ``` - 元组、列表、集合与字典表示形式也允许多重解包 ```python >>> *range(4), 4 (0, 1, 2, 3, 4) >>> [*range(4), 4] [0, 1, 2, 3, 4] >>> {*range(4), 4, *(5, 6, 7)} {0, 1, 2, 3, 4, 5, 6, 7} >>> {'x': 1, **{'y': 2}} {'x': 1, 'y': 2} ``` 5. **PEP 461:二进制序列的格式化**: - 为字节串和字节数组添加了类似于字符串格式化的功能。例如: ```python >>> b'Hello %b!' % b'World' b'Hello World!' >>> b'x=%i y=%f' % (1, 2.5) b'x=1 y=2.500000' ```