为什么Python 3不向后兼容?

80

我了解到Python 3不向后兼容。

这难道不会影响那些使用旧版本Python的应用程序吗?

Python 3的开发人员为什么不认为保持向后兼容非常重要?


5
当然不会影响它们,它们是在Python 2下运行的。 - Wooble
3
我通过谷歌搜索“Python 3向后兼容吗?”找到了这个讨论,它排名第一。我知道StackOverflow的理念是问题应该可回答而不是主观的。所以,如果这个问题标题改成“Python 3向后兼容吗?”而不是“为什么Python 3.0不向后兼容?”,你认为社区会考虑重新打开它吗? - blong
@blong:也许吧,但你可能还需要重写问题。 - Wooble
@Wooble 我认为你是对的。起初,我打算完全改变我的想法(同意你的观点)。然而,经过我再次思考,我认为这可能对新手有所帮助。你认为进一步修改问题会不会对OP的问题过于侵入性? - blong
不,它不会。 - neelmeg
1个回答

73

Python 3.0是否向后兼容,为什么?

Python 3.0 实现了许多非常有用的功能,并破坏了向后兼容性。这是故意为之的,以便即使 Python 2.x 代码在 Python 3.x 下无法正常工作,也可以实现这些伟大的特性。

因此,Python 3.0 故意不支持向后兼容 由此,你可以受益于全新的一组功能。它甚至被称为“Python 3000”或“Python 3K”。

来自“Python 3.0 的新功能”(这里):

与 2.6 相比,Python 3.0,也被称为“Python 3000”或“Py3K”,是第一个有意破坏向后兼容性的 Python 发布版。与典型版本相比,其中的更多变化对于所有 Python 用户都很重要。尽管如此,在消化这些变化之后,你会发现 Python 并没有发生太大的变化 - 总的来说,我们主要是修复已知的烦人的问题,除去了许多旧的垃圾。

Python 3.0 中新增的功能破坏了向后兼容性

一些最显著的功能可能被视为破坏向后兼容性,但同时也改进了语言:

  • print 现在是一个函数,而不是语句,将其用作语句将导致错误,
  • 各种函数和方法现在返回迭代器或视图,而不是列表,这使得迭代它们的结果更加内存高效(你不需要在内存中存储整个结果列表),
  • sorted()list.sort()等排序函数的cmp参数不再被支持,应该替换为key参数。
  • int现在与Python 2.x中的long相同,使得数字处理更简单。
  • /运算符现在默认为真除法运算符(你仍然可以使用//进行地板除法)。
  • Python 3.x中的文本现在默认为Unicode编码。
  • TrueFalseNone现在是保留字(因此不能执行True, False = False, True的操作)。
  • 改变了元类的使用方法。
  • 异常必须从BaseException派生,必须在Python 2.x中以不同的方式抛出和捕获。
  • 还有很多其他的变化,使Python更加可读、一致和明确。

2
重要的是要澄清,Python 3.x 不是 Python 2.x 的升级或后继版本,而是另一个分支。 - juliomalegria
5
@julio.alegria: 你能详细说明一下吗?实际上,Python 3.x旨在取代Python 2.x,并且如在“Python 2.7新特性”中所述:“Python 2.7计划成为最后一个2.x版本,因此我们致力于使它成为长期使用的好版本。为了帮助迁移到Python 3,2.7中包含了一些Python 3.x系列的新功能。” - Tadeck
1
我一定会去寻找,希望我能找到有趣的东西! :) - juliomalegria
1
@julio.alegria:太好了 :) 如果你找到了什么,请分享一下。 - Tadeck
1
自2.7以来,Python 2没有发布任何版本,并且将于2020年1月1日进入生命周期结束状态。 - Teemu Leisti
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接