为什么不能将Python2与Python3混合使用?

时间:2017-06-07 07:33:07

标签: python python-3.x compatibility python-2.x

尽管已经说过并在Python2和Python3上编写了所有内容,但我无法确定为什么开发人员无法混合使用Python2和Python3代码。当然必须有这个理由吗?

例如,在Fortran中,许多版本彼此不兼容,但它们仍然可以在同一个项目中共存。这同样适用于C和C ++:某些C代码与C ++不兼容,但编译器能够使用文件扩展名识别正确的语言。为什么没有为Python3选择这种方法有特定的原因吗?也就是说,让Python3模块通过.py3扩展名(或shebang注释)来识别,并为.py和.py3代码使用一个解释器吗?

修改

已经有一个名为Why is Python 3 not backwards compatible?的问题,但这个问题有所不同。我知道Python 3引入了新功能并因此而破坏了向后兼容性。它仍然不意味着Python 2和3不能以与C和C ++相同的方式共存。

2 个答案:

答案 0 :(得分:2)

你不能在同一个项目中混用python2和python3,因为:

  1. 口译员不同。你要么为python2运行解释器,要么为python3运行。我不知道任何动态选择python2或python3运行时的当前解释器。
  2. 语法略有不同。
  3. 类型不同。
  4. 但是,您当然可以运行python2和python3运行时,并使用它们之间传递某种(IPC)消息。

    对于C和C ++的情况,你可以在同一个进程中运行它们,所以没关系。在本质上,你也可以在同一个进程中运行python和C(或C ++)。

    我能想到的唯一方法就是让你在同一个进程中运行python2和python3就可以在同一个进程中嵌入两个运行时,但是,它们很可能会破坏对方的全局变量而感到困惑。

答案 1 :(得分:1)

  

为什么没有为Python3选择这种方法有特定原因吗?也就是说,让Python3模块通过.py3扩展名(或shebang注释)来识别,并为.py和.py3代码使用一个解释器吗?

因为完全没必要!在six等模块的帮助下,编写与Python2和Python3兼容且无源代码更改的代码非常容易。这不仅仅是一个客厅伎俩;像Django这样的主要项目就是这样编写的。