Python3.7 新特性
简介
Python3.7 发布于2018年6月27日,这儿总结一下改版本引入的一些新功能
官方新特性链接 Python3.7 新特性
安装
此处主要介绍在Ubuntu下安装 Python3.7
- 添加deadsnakes源
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
- 安装 Python3.7
sudo apt install python3.7-full
- 安装 Python3.7 的pip
python3.7 -m ensurepip --upgrade
breakpoint 函数
内置了新的 breakpoint()
函数,作为简单进入Python调试的方式,使用 breakpoint()
函数,相当于设置了断点,遇到 breakpoint()
会自动进入 pdb 调试模式
内置 breakpoint() 会调用 sys.breakpointhook()。 在默认情况下后者会导入 pdb 然后再调用 pdb.set_trace(),但是通过将 sys.breakpointhook() 绑定到你选定的函数,breakpoint() 可以进入任何调试器。 此外,环境变量 PYTHONBREAKPOINT 可被设置为你选定的调试器的可调用对象。 设置 PYTHONBREAKPOINT=0 会完全禁用内置 breakpoint()。
具有纳秒级精度的新时间函数
现代系统的时钟精度可以超过由 time.time() 函数及其变化形式所返回的浮点数的有限精度。 为了避免精度损失,Python3.7 在 time 模块中增加了原有计时器函数的六个新“纳秒版”变化形式
- time.clock_gettime_ns()
- time.clock_settime_ns()
- time.monotonic_ns()
- time.perf_counter_ns()
- time.process_time_ns()
- time.time_ns()
这些新函数会以整数值的形式返回纳秒数。
1 | import time |
新增 dataclasses
新的 dataclass() 装饰器提供了一种声明数据类的方式。 数据类使用变量标注来描述其属性。 它的构造器和其他魔术方法例如 repr(), eq() 以及 hash() 会自动地生成。
1 | from dataclasses import dataclass |
dict 对象正式保持插入时顺序
dict 对象会保持插入时的顺序这个特性其实在 Python 3.6 中已经非正式的出场了,现在 Python 3.7 中正式宣布成为 Python 语言官方规范的一部分。
dict 对象有了顺序,对于一些方法自然就有了影响,比如 popitem 之前是随机删除,而现在 就是删除最后加入的键值对了,有了确定性。
1 | a={'a': 1,'b': 2,'c': 3} |
但是,按照 dict 的特性,我们在写代码的过程中依然不应该依赖 dict 有序,实际开发中还是应该按照无序处理
新增 getattr() 定制对模块属性的访问
Python 3.7 允许在模块上定义 __getattr__()
并且当以其他方式找不到某个模块属性时将会调用它。 在模块上定义 __dir__()
现在也是允许的。
1 | class User(object): |
其他
- async 和 await 变为了保留关键字
- typing 不会向核心 CPython 解释器引入的限制取消了
- 允许将超过 255 个参数传递给一个函数,而现在一个函数也可以拥有超过 255 个形参