web-dev-qa-db-fra.com

Pourquoi Python 3 n'est pas rétrocompatible?

J'ai appris que Python 3 n'est pas rétrocompatible.

Cela n'affectera-t-il pas beaucoup d'applications utilisant des versions plus anciennes de Python?

Comment les développeurs de Python 3 n'ont-ils pas pensé qu'il était absolument nécessaire de le rendre rétrocompatible?

64
neelmeg

Python 3.0 est-il rétrocompatible et pourquoi?

Python 3.0 implémente de nombreuses fonctionnalités très utiles et rompt la compatibilité descendante. Il le fait exprès, de sorte que les grandes fonctionnalités peuvent être implémentées même si le code Python 2.x peut ne pas fonctionner correctement sous Python 3.x.

Donc, fondamentalement, Python 3.0 n'est pas rétrocompatible exprès . Grâce à cela, vous pouvez bénéficier d'un tout nouvel ensemble de fonctionnalités. Il est même appelé " Python 3000" ou " Python 3K".

De " Quoi de neuf dans Python 3.0" (disponible ici ):

Python 3.0, comparé à 2.6. Python 3.0, également connu sous le nom de "Python 3000" ou "Py3K", est le premier jamais intentionnellement incompatible à l'envers Python . Il y a plus de changements que dans une version classique, et plus importants pour tous les utilisateurs Python. Néanmoins, après avoir digéré les changements, vous constater que Python n'a vraiment pas beaucoup changé - en gros, nous réparons principalement les ennuis et les verrues bien connus, et en supprimons beaucoup de vieux cruft .

Les fonctionnalités de Python sont nouvelles dans la version 3.0, cassant la compatibilité descendante

Certaines des fonctionnalités les plus remarquables qui peuvent être considérées comme brisant la compatibilité descendante, mais améliorant le langage en même temps, sont:

  • print est maintenant une fonction, pas une instruction, et son utilisation comme instruction entraînera une erreur,
  • diverses fonctions et méthodes renvoient désormais un itérateur ou une vue au lieu d'une liste, ce qui rend l'itération de leurs résultats plus efficace en mémoire (vous n'avez pas besoin de stocker la liste complète des résultats dans la mémoire),
  • L'argument cmp pour le tri de fonctions comme sorted() et list.sort() n'est plus pris en charge et doit être remplacé par l'argument key,
  • int est désormais le même que Python 2.x long, ce qui rend le traitement des nombres moins complexe,
  • / L'opérateur est désormais un opérateur pour la véritable division par défaut (vous pouvez toujours utiliser // pour la division du sol),
  • texte en Python 3.x est maintenant Unicode par défaut,
  • True, False et None sont maintenant des mots réservés (vous ne pouvez donc pas faire True, False = False, True,
  • modification de l'utilisation de la métaclasse,
  • les exceptions doivent être dérivées de BaseException, doivent être levées et interceptées différemment que dans Python 2.x,
  • et bien d'autres changements, rendant Python plus lisible, cohérent et explicite,
58
Tadeck