Why is Python 3 not backwards compatible?

我已经了解到 Python3不向后兼容。

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

为什么 Python3的开发人员不认为让它向后兼容是绝对必要的呢?

42711 次浏览

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

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

So, basically, Python 3.0故意不向后兼容. 由于这个原因,您可以从一组全新的特性中受益。 It is even called "巨蟒3000" or "巨蟒3K".

选自《 Python 3.0的新特性》(备有 给你) :

Python 3.0,而不是2.6。Python3.0,也称为“ Python3000”或“ Py3K”,是有史以来第一个故意向后不兼容的 Python 发行版。与典型的发行版相比,有更多的更改,这些更改对所有 Python 用户都很重要。尽管如此,在消化了这些变化之后,您会发现 Python 实际上并没有发生太大的变化——大体上就是 我们主要是修复众所周知的烦恼和疣,清除许多旧的残渣

Python 在3.0版本中有了新功能,打破了向下兼容

一些最值得注意的特点可能被认为是打破了向下兼容,但同时也改善了语言,这些特点包括:

  • print is now a function, not a statement, and using it as statement will result in an error,
  • 各种函数和方法现在返回一个迭代器或视图而不是 list,这使得迭代结果的内存效率更高(您不需要将整个结果列表存储在内存中) ,
  • 不再支持用于排序函数(如 sorted()list.sort())的 cmp参数,应该用 key参数替换,
  • int现在与 Python 2.x 的 long相同,这使得数字处理变得不那么复杂,
  • 在默认情况下,/操作符现在是真除法的操作符(仍然可以使用 //进行楼层除法) ,
  • Python 3.x 中的文本现在默认为 Unicode,
  • TrueFalseNone现在是保留字(所以你不能做 True, False = False, True,
  • 改变了元类的用法,
  • 异常需要从 BaseException派生,必须以不同于 Python 2.x 的方式引发和捕获,
  • 以及其他更多的改变,使 Python 更具可读性、一致性和显式性,