在看社区里面开源的深度学习或者python项目时, 经常会看到诸如__future__
或者six.moves
这种名字很奇怪的包, 实际上, 这些包都是为了实现python2与python3的兼容性而设置的, 在python社区里, 很多公司或者个人为了只维护一套代码, 一般都会写同时兼容Python2/3的代码.
future
python3 出来的时候, python的设计者们当然也考虑过代码之间的兼容问题, 许多为兼容性设计的功能可以通过 __future__
这个包来导入, 较常用的例如:
1 | from __future__ import print_function |
上面四条语句导入以后, python2中的很多语法就和python3差不多了
six
由于 python2/3 之间还有很多别的差异, 因此只用 __future__
是不够的. 用 six
这个 第三方模块 可以解决这个问题.
例如, Python2 和 Python3 中字符串类型名字不同, six可以把它们变成统一的第三种形式: six.text_type
, six.binary_type