Casser toute la compatibilité d'un coup n'a aucun sens.
Comme je l'ai déjà expliqué ça et là, les changements brisant la compatibilité est d'éviter les erreurs de programmation.
Exemple 1
Mélanger des octets (str) et caractères (unicode) est source de bugs difficile à corriger. Python2 autorise la comparaison entre un octet et un caractère, ce qui conceptuellement n'a aucun sens. Python3 lance une erreur TypeError (can't compare bytes and str).
Exemple 2
0666 est lu comme 438 par Python2, sauf que ça peut dérouter les débutants qui saisissent 001, 002, (...), 008 => SyntaxError. Python3 exige le préfixe « 0o » (zéro, lettre O) : 0o666.
Exemple 3
Les méthodes values() et items() d'un dictionnaire sont des itérateurs. Ceci évite que « for key, valeur in data.items(): ... » ne crée une liste temporaire qui peut peser lourd en mémoire, prend de temps à être créée. En plus, si ça se trouve la boucle va être interrompue à la 2e itération ! On pourra toujours obtenir une liste mais avec la syntaxe générique « items = list(data.items()) ».
Exemple 4
De nombreux ajouts visent à durcir les contrôles du typage. L'annotation des fonctions permettra d'indiquer le protoype d'une fonction et les classes abstraites peuvent servir d'interface.
[^] # Re: Plusieurs bémols
Posté par Victor STINNER (site web personnel) . En réponse à la dépêche Sortie de la version 3.0a1 du langage Python. Évalué à 3.
Comme je l'ai déjà expliqué ça et là, les changements brisant la compatibilité est d'éviter les erreurs de programmation.
Exemple 1
Mélanger des octets (str) et caractères (unicode) est source de bugs difficile à corriger. Python2 autorise la comparaison entre un octet et un caractère, ce qui conceptuellement n'a aucun sens. Python3 lance une erreur TypeError (can't compare bytes and str).
Exemple 2
0666 est lu comme 438 par Python2, sauf que ça peut dérouter les débutants qui saisissent 001, 002, (...), 008 => SyntaxError. Python3 exige le préfixe « 0o » (zéro, lettre O) : 0o666.
Exemple 3
Les méthodes values() et items() d'un dictionnaire sont des itérateurs. Ceci évite que « for key, valeur in data.items(): ... » ne crée une liste temporaire qui peut peser lourd en mémoire, prend de temps à être créée. En plus, si ça se trouve la boucle va être interrompue à la 2e itération ! On pourra toujours obtenir une liste mais avec la syntaxe générique « items = list(data.items()) ».
Exemple 4
De nombreux ajouts visent à durcir les contrôles du typage. L'annotation des fonctions permettra d'indiquer le protoype d'une fonction et les classes abstraites peuvent servir d'interface.