TOC

Python3 的变化

Python3 用了有段时间了,3.6、3.7、3.8。
后面新上手的人应该都是用的 3.6+,只有部分悲催的人可能还需要维护 2.7,2.6 的项目,甚至是需要兼容 2 和 3(3.x 里面各个版本还有很多差异,直到 3.6 才算稳定下来)。

对于不熟悉 Python 的人来说,这些不向后兼容的变化导致 Python2 代码不能在 Python3 环境运行,确实影响很大。
对于用的很深的人呢,或许也有很多影响,说不定 ABI 兼容都有变化。
但是对我这种混口饭吃的人来说,可以忽略吧。

部分标准库的结构发生了调整,可以使用 2to3 看看,然后人工校对。

  1. 字符编码默认 UTF-8,不需要加 coding u8 的声明了
  2. 数字类型方面:long 不存在了,int / int = float
  3. 字符串类型方面:unicode / str => str / bytes
  4. 字典改成有序的了
  5. dictkeys, values, items,所谓的动态视图
  6. 新增 next 方法用于迭代,调用迭代器的 __next__ 方法(替代原来迭代器的 next 方法)
  7. hmacbase64 之前需要编码
  8. 一些方法改成返回迭代器:map, filter
  9. 异常链,可能会时不时看到这种日志:
    During handling of the above exception, another exception occurred:
    
    1. 结构重新整理:httpurllib, io, 还有很多
    之前命名风格为大驼峰式的一些标准库都改成了小写

新的东西

  1. 新的格式化方式 fstring
  2. 新引入的类型提示
    另外对类型的控制有收拢的倾向,比如不同内置类型变量的比较
  3. 协程 asyncio, Tornado 的设计被吸收到标准库里面

参考资料与拓展阅读