编写 Python2、Python3 兼容的代码
Python2 到 Python3 是一个较大的版本更新。目前,生产环境依然有大量项目使用的是 Python2。但,这并不意味着项目会一直停留在 Python2,开发者也需要考虑项目对 Python3 的兼容性,以方便迁移,同时也是对新知识的学习。下面是一些学习的知识点整理。
1. Python2 升级 Python3
贸然地升级 Python3 ,无疑将会面临巨大风险。充分地了解 Python2 和 Python3 的区别,学习 Python3 的新特性,预留时间,制定升级计划是必须的。- 单元测试。单元测试能跑通,是平稳升级的重要保障。单元测试能够验证升级前后,功能是否一致。如果项目没有单元测试,那么在升级之前应该补上。
- py2 → six → py3。升级到 Python3,最大的难点在于,改变开发人员的使用习惯。比如,在 Python2 中推荐的 xrange, 在 Python3 中却不能用。开发人员需要一个学习和适应的过程。推荐的策略是,新的功能代码兼容 Python3,逐步重构存量代码。
- six.class_types,类类型。在 Python2 中包含旧类和新类。在 Python3 中只是新类
- six.integer_types,整数类型。在 Python2 中是 long 或 int,在 Python3 中是 int
- six.string_types,文本数据的类型。Python2 中是 basestring() , Python3 中是 str
- six.text_type,用于表示(Unicode)文本数据的类型。Python2 中是 unicode() ,Python3 中是 str(Pyhon3 对文本数据进行了整合,默认为 Unicode 文本数据)
- six.binary_type,二进制数据的类型。Python2中是 str,Python3 中是 bytes
- six.MAXSIZE, list 或 dict 等容器的最大尺寸。这相当于 Python 2.6 及更高版本(包括3.x)的 sys.maxsize。在 Python3 中没有直接的等价物, 因为它的整数类型的长度仅受限于内存大小
- uniittest assert的兼容
- urllib 库改动的兼容
- 高级的自定义move
- https://pythonhosted.org/six/