【问题标题】:Why is Python 3 not backwards compatible? [closed]为什么 Python 3 不向后兼容? [关闭]
【发布时间】:2012-01-30 16:12:23
【问题描述】:

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

它不会影响很多使用旧版本 Python 的应用程序吗?

Python 3 的开发人员为什么不认为绝对有必要使其向后兼容?

【问题讨论】:

  • 当然不会影响它们,它们是在 Python 2 下运行的。
  • @Wooble 我遇到了这个讨论,因为我谷歌搜索“python 3 向后兼容吗?”这是最好的结果。我意识到 StackOverflow 的口头禅是问题应该是可以回答的,而不是主观的。所以,我想知道这个问题的标题是“Python 3 是否向后兼容?”与“为什么 Python 3.0 不能向后兼容?”,你认为社区会考虑取消关闭它?
  • @blong:也许,但你可能还得重写问题。
  • @Wooble 我认为你是对的。最初,我打算完全改变主意(同意你)。但是,在我考虑更多之后,我认为这可能对新手有所帮助。您是否认为考虑进一步更改问题会过于侵入 OP 的问题?
  • 不,不会的。

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


【解决方案1】:

Python 3.0 向后兼容吗?为什么?

Python 3.0 实现了许多非常有用的特性并打破了向后兼容性。它是故意这样做的,因此即使 Python 2.x 代码在 Python 3.x 下可能无法正常工作,也可以实现出色的功能。

因此,基本上,Python 3.0 并非有意向后兼容因此,您可以从一组全新的功能中受益。它甚至被称为“Python 3000”或“Python 3K”。

来自“Python 3.0 的新特性”(here):

Python 3.0,与 2.6 相比。 Python 3.0,也称为“Python 3000”或“Py3K”,是第一个故意向后不兼容的 Python 版本。与典型版本相比,变化更多,而且对所有 Python 用户都很重要。然而,在消化了这些变化之后,你会发现 Python 确实并没有太大的变化——总的来说,我们主要修复了众所周知的烦恼和缺陷,并删除了很多旧的垃圾强>.

Python 3.0 的新特性,打破了向后兼容性

可能被认为破坏向后兼容性但同时改进了语言的一些最值得注意的功能是:

  • print 现在是函数,而不是语句,作为语句使用会报错,
  • 各种函数和方法现在返回迭代器或视图而不是列表,这使得迭代其结果的内存效率更高(您无需将整个结果列表存储在内存中),
  • 不再支持 cmp 参数,用于像 sorted()list.sort() 这样的排序函数,应替换为 key 参数,
  • int 现在与 Python 2.x 的 long 相同,这使得数字处理变得不那么复杂,
  • / 运算符现在默认是真正除法的运算符(您仍然可以使用// 进行地板除法),
  • Python 3.x 中的文本现在默认为 Unicode,
  • TrueFalseNone 现在是保留字(所以你不能这样做 True, False = False, True
  • 改变了元类的用法,
  • 异常必须从 BaseException 派生,必须以不同于 Python 2.x 的方式引发和捕获,
  • 以及更多其他更改,使 Python 更具可读性、一致性和明确性,

【讨论】:

  • 重要的是要澄清 Python 3.x 不是 Python 2.x 之后的升级或后续版本,而是另一个分支。
  • @julio.alegria:你能详细说明一下吗?实际上,Python 3.x 旨在取代 Python 2.x,正如“What's new in Python 2.7”中所述:“Python 2.7 计划成为 2.x 版本中的最后一个版本,因此我们致力于使其成为长期的良好发布。为了帮助移植到 Python 3,Python 3.x 系列的几个新功能已包含在 2.7 中。"。
  • @julio.alegria:你可能是对的。您能否提供支持这一点的任何来源(“这并不意味着(根本)Python 3.x 旨在取代 Python 2.x”)?我的意思是:Python 核心团队(也许是 Guido Van Rossum?)是否有任何评论支持这一点?
  • 我一定会去寻找的,希望能找到一些有趣的东西! :)
  • @julio.alegria: 太好了 :) 如果你发现了什么,请分享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
相关资源
最近更新 更多