【问题标题】:Can Python code satisfy both 2.7.x and 3.4.x requirements?Python 代码能否同时满足 2.7.x 和 3.4.x 的要求?
【发布时间】:2015-04-09 03:20:06
【问题描述】:

我在 Python 2.7.2 中编写了一些代码,现在我可能需要切换到 3.4.3,但我的代码中断了(现在只是 print 语句,但谁知道还有什么)。是否可以以同时兼容 2.7.2 和 3.4.3 的方式编写语法?

我刚开始使用 Python,不想养成一种风格的习惯,然后又不得不用另一个版本重新学习。

【问题讨论】:

标签: python python-2.7


【解决方案1】:

是的,但取决于您的代码。你有很多选择:

【讨论】:

  • 据我了解,我可以使用一些工具将代码的一种形式自动更改为另一种形式......但我最初是在问我是否可以采用一种编程风格将始终同时兼容 2.7.x 和 3.4.x。
  • 不,请阅读我们提供给您的所有信息,包括@jonrsharpe 提供的链接。它不仅与工具有关,还与您想要做的一切有关:适用于两个版本,删除 python2 等。
【解决方案2】:

是的,Python 代码可以同时兼容 Python 2 和 3。

有 3 个选项如何做到这一点:

  • 保持源代码本身兼容Python 2 和3;这是最常用的方式

  • 对 Python 2 和 3 使用 单独的代码;通常不是很有用,但对于一些低级代码来说可能是可以接受的。例如CherryPy wsgiserver(注意文件wsgiserver2.py和wsgiserver3.py)。

  • 使用 Python 2 或 Python 3 编写代码,并使用 2to3 或 3to2 等自动工具翻译到另一个版本。

当 Python 3 首次发布时,2to3 方式是首选方式。您可以在What’s New In Python 3.0 中找到这一点:“不建议尝试编写在 Python 2.6 和 3.0 下都运行不变的源代码。” 但从那时起,时代变了。引入了一些东西,使得为 Python 2 和 3 编写代码变得更加容易——例如 Python 3.3 中的u"" 语法。此外,工具 3to2 自 2010 年以来没有得到太多更新......

当编写在 Python 2 和 3 上保持不变的代码时,可能需要一些 兼容性代码 以及一些简单的ifs;例如查看flask/_compat.py。如果这还不够,请使用six。

一些关于如何在 Python 2 和 3 上编写代码的资源:

Python 2/3 问题主要适用于库、共享代码和正在升级到 Python 3 的 Python 2 项目。如果您开始的项目不是库,那么只需使用 Python 3强> 如果可能的话。

【讨论】:

    【解决方案3】:

    上面已经有一些很好的答案了。快速解决打印问题的方法是使用 future 模块,该模块将一些 Python 3 功能向后移植到 Python 2。

    我建议您至少编写带有新打印功能的 Python 2.7 代码。为此,请从 future 导入新的打印功能。即

    from __future__ import print_function

    您现在将在 Python 2 中使用 print as 得到语法错误:

    print x

    现在必须这样做:

    print(x)

    还有其他解决方案,例如 2to3 和 6,但目前这些解决方案可能有点复杂,尤其是在您学习 Python 时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      相关资源
      最近更新 更多