编写交叉兼容的Python 2/3:__future __,six和future.utils之间的区别?

时间:2017-02-08 10:38:46

标签: python python-2.7 python-3.x six

我正在编写交叉兼容的Python 2和3代码,并提供了cheatsheet的一些帮助。我注意到有不同的软件包和模块有助于实现此目的:future包(例如future.utils等),six包和内置__future__模块。

使用这些包时是否有任何差异需要注意?我应该混合和匹配它们,还是可以编写完全交叉兼容的代码只用其中一个编写?

1 个答案:

答案 0 :(得分:7)

就python 2-3兼容性而言:

__future__ - 是python中的内置模块,它允许您在python版本中使用可选功能,它们是可选的(与强制性相对)。例如,unicode_literals中的python2.7是可选的,但在python3.0中是强制性的。

six - 主要重命名模块/函数以在python2python3之间产生更高的兼容性,但实际上并不反向移植(或转发端口)功能。 python版本>=2.4也支持它。

future - 更现代,仅支持python>=2.6,>=3.3,功能更丰富。

似乎there is some agreement future如果您可以放弃对旧版本python的支持,six优先于override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){ if (segue.identifier == "yourSegueIdentifer") { // initialize new view controller and cast it as your view controller var viewController = segue.destinationViewController as AnotherViewController // your new view controller should have property that will store passed value viewController.passedValue = valueToPass } }