为什么Python 3不向后兼容?

时间:2012-01-30 16:12:24

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

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

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

Python 3的开发人员是如何认为将其向后兼容绝对必要的?

1 个答案:

答案 0 :(得分:57)

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中的
  • 文本默认情况下为Unicode,
  • TrueFalseNone现在是保留字(因此您无法True, False = False, True
  • 更改了元类的使用,
  • 需要从BaseException派生例外,必须提出&与Python 2.x不同,
  • 以及更多其他更改,使Python更具可读性和一致性明确的,