Python3 用了有段时间了,3.6、3.7、3.8。
后面新上手的人应该都是用的 3.6+,只有部分悲催的人可能还需要维护 2.7,2.6 的项目,甚至是需要兼容 2 和 3(3.x 里面各个版本还有很多差异,直到 3.6 才算稳定下来)。
对于不熟悉 Python 的人来说,这些不向后兼容的变化导致 Python2 代码不能在 Python3 环境运行,确实影响很大。
对于用的很深的人呢,或许也有很多影响,说不定 ABI 兼容都有变化。
但是对我这种混口饭吃的人来说,可以忽略吧。
部分标准库的结构发生了调整,可以使用 2to3 看看,然后人工校对。
- 字符编码默认 UTF-8,不需要加 coding u8 的声明了
- 数字类型方面:
long
不存在了,int / int = float
- 字符串类型方面:
unicode
/str
=>str
/bytes
- 字典改成有序的了
dict
的keys
,values
,items
,所谓的动态视图- 新增 next 方法用于迭代,调用迭代器的
__next__
方法(替代原来迭代器的 next 方法) hmac
、base64
之前需要编码- 一些方法改成返回迭代器:
map
,filter
- 异常链,可能会时不时看到这种日志:
1. 结构重新整理:During handling of the above exception, another exception occurred:
http
,urllib
,io
, 还有很多
之前命名风格为大驼峰式的一些标准库都改成了小写
新的东西
- 新的格式化方式 fstring
- 新引入的类型提示
另外对类型的控制有收拢的倾向,比如不同内置类型变量的比较 - 协程
asyncio
, Tornado 的设计被吸收到标准库里面
参考资料与拓展阅读
- https://mp.weixin.qq.com/s/-NDtjQb7vXfhpHXHGIbYpA
- Python3.0-3.6的版本变化