Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不可能把蟒蛇2和蟒蛇3混合在一起?_Python_Python 3.x_Compatibility_Python 2.x - Fatal编程技术网

Python 为什么不可能把蟒蛇2和蟒蛇3混合在一起?

Python 为什么不可能把蟒蛇2和蟒蛇3混合在一起?,python,python-3.x,compatibility,python-2.x,Python,Python 3.x,Compatibility,Python 2.x,尽管在Python2和Python3上已经说过和写过这么多,我还是无法确定为什么开发人员不可能混合使用Python2和Python3代码。这肯定是有原因的吧 例如,在Fortran中,许多版本彼此不兼容,但它们仍然可以在同一个项目中愉快地共存。C和C++同样适用:有些C代码与C++不兼容,但是编译器能够使用文件扩展名识别正确的语言。Python3没有选择这种方法有什么具体原因吗?也就是说,让Python3模块由.py3扩展名(或shebang注释)标识,并为.py和.py3代码使用一个解释器 编

尽管在Python2和Python3上已经说过和写过这么多,我还是无法确定为什么开发人员不可能混合使用Python2和Python3代码。这肯定是有原因的吧

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

编辑:

已经有一个名为的问题,但此问题不同。我知道Python3引入了新特性,并因此破坏了向后兼容性。它并不意味着Python 2和3不能以C和C++的方式共存。 Python3没有选择这种方法有什么具体原因吗?也就是说,让Python3模块由.py3扩展名(或shebang注释)标识,并为.py和.py3代码使用一个解释器


因为这完全没有必要!有了这些模块的帮助,编写既与Python2兼容又与Python3兼容的代码非常容易,而且不需要更改源代码。这不仅仅是一个客厅的把戏;像这样的主要项目都是这样写的。

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

  • 口译员是不同的。您正在运行python2或python3的解释器。我不知道目前有哪种解释器动态地选择python2或python3运行时
  • 语法(略有)不同
  • 类型不同
  • 但是,您当然可以同时运行python2和python3运行时,并在它们之间使用某种(IPC)消息传递

    用C和C++的例子,可以在同一个进程中运行它们,这样就可以了。顺便说一句,您也可以在同一进程中运行python和C(或C++)


    我能想到的唯一方法是在同一个进程中运行python2和python3,就是将两个运行时都嵌入到同一个进程中,但是,它们很可能会相互碰撞全局并产生混淆。

    可能是@Thomas Nope的重复,而不是他所要求的。向后兼容性=/=两个不同版本的共存确实,它有细微的不同,因此可能不适合进行密切投票。但是向后兼容是共存的先决条件,所以它确实回答了这个问题。“向后兼容是共存的先决条件”,这听起来更像是@akvilas问题的答案,而不是你链接的“重复”。您可能还需要一些关于这一点的源代码或解释,因为OP明确地说:“例如,在Fortran中,许多版本彼此不兼容,但它们仍然可以在同一个项目中愉快地共存。”Python 2和3没有兼容的标准库,所以你不能简单地在它们之间来回传递对象。您可以创建一个解释器,作为一个或另一个运行文件,但您已经可以通过安装两个解释器并编写一个基于扩展名选择一个的小型shell脚本来实现这一点。对于只需要运行一个口译员的人来说,强制要求两个口译员都运行是没有意义的。你描述的是当前的情况。我对你的理由(1)感兴趣,并问为什么会这样。(对于python开发人员来说)创建一个动态选择Python2和Python3的解释器在技术上是否困难?好吧,这样做需要付出努力,没有任何好处。做python3的全部目的是在不保留向后兼容性的情况下自由地进行更改。是的,这将导致更慢、更复杂的解释器。迁移到Python3的全部原因是为了将它从向后兼容性的问题中解放出来。更慢、更复杂的解释器:如果这是真的,那么重点就在这里。但是怎么能慢一点呢?检查文件名,然后选择解释器。简单..?是的,除了windows以外的所有系统都是这样。(shebang行选择解释器)。在windows上,有些人正在使用一个python“选择器”应用程序来模拟它。我不是说如何编写新代码。当然,编写python2和python3解释器都能理解的代码是可能的,然后您将得到一个更复杂的python3解释器。创建Python3的部分原因是为了避免python2的“错误”。将其全部向前推进将导致更慢、更笨重的解释器。理论上说,你可以这样做,但这是不可取或不必要的。