Python 2 vs Python 3: Considérations pratiques

introduction

Python est un langage de programmation extrêmement lisible et polyvalent. Avec un nom inspiré du groupe de comédie britannique Monty Python, l’objectif fondamental de l’équipe de développement Python était de rendre le langage agréable à utiliser. Facile à configurer, écrit dans un style relativement simple avec un retour immédiat des erreurs, Python est un excellent choix pour les débutants.

Comme Python est un langage multiparadigm - c'est-à-dire qu'il prend en charge plusieurs styles de programmation, y compris les scripts et orienté objet - il est bon pour une utilisation générale. De plus en plus utilisé dans le secteur par des organisations telles que United Space Alliance (principal fournisseur de services de support de navette de la NASA) et Industrial Light & Magic (VFX et studio d’animation de Lucasfilm), Python offre un grand potentiel pour ceux qui souhaitent acquérir un langage de programmation supplémentaire. .

Développé à la fin des années 1980 et publié pour la première fois en 1991, Python a été écrit par Guido van Rossum, qui est toujours très actif dans la communauté. Conçue comme le successeur du langage de programmation ABC, la première itération de Python comprenait déjà la gestion des exceptions,functions etclasses with inheritance. Quand un important forum de discussion Usenet appelé comp.lang.python a été créé en 1994, la base d’utilisateurs de Python a grandi, ouvrant la voie pour que Python devienne l’un des langages de programmation les plus populaires pour le développement open source.

Aperçu général

Avant d'examiner les opportunités potentielles liées à - et les principales différences de programmation entre - Python 2 et Python 3, examinons l'arrière-plan des versions majeures les plus récentes de Python.

Python 2

Publié à la fin de l’année 2000, Python 2 indiquait un processus de développement du langage plus transparent et plus complet que les versions précédentes de Python avec l’implémentation de PEP (Python Enhancement Proposal), une spécification technique qui fournit des informations aux membres de la communauté Python ou décrit une nouvelle fonctionnalité du logiciel. la langue.

En outre, Python 2 incluait de nombreuses autres fonctionnalités de programmation, notamment un récupérateur de mémoire à détection de cycle pour automatiser la gestion de la mémoire, une prise en charge accrue de Unicode pour normaliser les caractères et une compréhension de liste pour créer une liste basée sur des listes existantes. Au fur et à mesure du développement de Python 2, de nouvelles fonctionnalités ont été ajoutées, notamment l’unification des types et des classes de Python dans une hiérarchie unique dans la version 2.2 de Python.

Python 3

Python 3 est considéré comme le futur de Python et est la version du langage en cours de développement. Une refonte majeure, Python 3, a été publiée à la fin de 2008 pour corriger et corriger les défauts de conception intrinsèques des versions précédentes du langage. Le développement de Python 3 avait pour objectif de nettoyer la base de code et de supprimer les redondances, en précisant qu'il n'existait qu'un seul moyen d'effectuer une tâche donnée.

Les principales modifications apportées à Python 3.0 comprenaient la modification de l'instructionprint en une fonction intégrée, l'amélioration de la façon dont les entiers sont divisés et la fourniture d'une meilleure prise en charge Unicode.

Au début, Python 3 a été lentement adopté car le langage n’était pas rétrocompatible avec Python 2, ce qui a obligé les utilisateurs à choisir la version du langage à utiliser. En outre, de nombreuses bibliothèques de packages n'étaient disponibles que pour Python 2, mais comme l'équipe de développement derrière Python 3 a répété qu'il n'y avait plus de support technique pour Python 2, d'autres bibliothèques ont été portées sur Python 3. L'adoption accrue de Python 3 peut être illustrée par le nombre de packages Python qui prennent désormais en charge Python 3, qui comprenait actuellement 339 des 360 packages Python les plus populaires.

Python 2.7

Après la version 2008 de Python 3.0, Python 2.7 a été publié le 3 juillet 2010 et était prévu comme la dernière des versions 2.x. L'intention de Python 2.7 était de permettre aux utilisateurs de Python 2.x de transférer plus facilement des fonctionnalités vers Python 3 en fournissant une certaine mesure de compatibilité entre les deux. Ce support de compatibilité incluait des modules améliorés pour la version 2.7 commeunittest pour prendre en charge l'automatisation des tests,argparse pour l'analyse des options de ligne de commande et des classes plus pratiques danscollections.

En raison de sa position unique en tant que version entre les versions précédentes de Python 2 et Python 3.0, Python 2.7 est resté un choix très prisé des programmeurs en raison de sa compatibilité avec de nombreuses bibliothèques robustes. Lorsque nous parlons de Python 2 aujourd'hui, nous nous référons généralement à la version 2.7 de Python car il s'agit de la version la plus fréquemment utilisée.

Python 2.7, cependant, est considéré comme un langage traditionnel et son développement continu, qui consiste principalement en corrections de bugs, cessera complètement en 2020.

Différences Clés

Bien que Python 2.7 et Python 3 partagent de nombreuses fonctionnalités similaires, ils ne doivent pas être considérés comme totalement interchangeables. Bien que vous puissiez écrire du bon code et des programmes utiles dans l'une ou l'autre version, il est important de comprendre qu'il y aura des différences considérables dans la syntaxe et la gestion du code.

Vous trouverez ci-dessous quelques exemples, mais gardez à l’esprit que vous rencontrerez probablement davantage de différences syntaxiques à mesure que vous continuerez à apprendre Python.

Impression

Dans Python 2,print est traité comme une instruction au lieu d'une fonction, ce qui était une zone de confusion typique car de nombreuses autres actions en Python nécessitent des arguments entre parenthèses pour s'exécuter. Si vous voulez que votre console imprimeSammy the Shark is my favorite sea creature en Python 2, vous pouvez le faire avec l'instructionprint suivante:

print "Sammy the Shark is my favorite sea creature"

Avec Python 3,print() est maintenant explicitement traité comme une fonction, donc pour imprimer la même chaîne ci-dessus, vous pouvez le faire simplement et facilement en utilisant la syntaxe d'une fonction:

print("Sammy the Shark is my favorite sea creature")

Cette modification rend la syntaxe de Python plus cohérente et facilite également le changement entre différentes fonctions d’impression. De manière pratique, la syntaxeprint() est également rétrocompatible avec Python 2.7, de sorte que vos fonctions Python 3print()peuvent s'exécuter dans les deux versions.

Division avec entiers

Dans Python 2, tout nombre que vous tapez sans décimales est traité comme le type de programmation appeléinteger. Bien qu'à première vue, cela semble être un moyen facile de gérer les types de programmation, lorsque vous essayez de diviser des entiers ensemble, vous vous attendez parfois à obtenir une réponse avec des décimales (appeléesfloat), comme dans:

5 / 2 = 2.5

Cependant, dans Python 2, les entiers étaient fortement typés et ne changeraient pas en un flottant avec des décimales, même dans les cas où cela aurait un sens intuitif.

Lorsque les deux nombres de part et d'autre du symbole de division/ sont des entiers, Python 2 faitfloor division de sorte que pour le quotientx le nombre retourné soit le plus grand entier inférieur ou égal àx. Cela signifie que lorsque vous écrivez5 / 2 pour diviser les deux nombres, Python 2.7 renvoie le plus grand entier inférieur ou égal à 2,5, dans ce cas2:

a = 5 / 2
print a
Output2

Pour remplacer cela, vous pouvez ajouter des décimales comme dans5.0 / 2.0 pour obtenir la réponse attendue2.5.

En Python 3,integer division est devenu plus intuitif, comme dans:

a = 5 / 2
print(a)
Output2.5

Vous pouvez toujours utiliser5.0 / 2.0 pour renvoyer2.5, mais si vous voulez faire une division par étage, vous devez utiliser la syntaxe Python 3 de//, comme ceci:

b = 5 // 2
print(b)
Output2

Cette modification de Python 3 a rendu la division par des entiers beaucoup plus intuitive et est une fonctionnalité qui estnot rétrocompatible avec Python 2.7.

Support Unicode

Lorsque les langages de programmation gèrent le typestring, c'est-à-dire une séquence de caractères, ils peuvent le faire de différentes manières afin que les ordinateurs puissent convertir des nombres en lettres et autres symboles.

Python 2 utilise l'alphabet ASCII par défaut, donc lorsque vous tapez"Hello, Sammy!", Python 2 gérera la chaîne comme ASCII. Limité à quelques centaines de caractères au mieux dans diverses formes étendues, ASCII n’est pas une méthode très flexible pour coder des caractères, en particulier des caractères non anglais.

Pour utiliser le codage de caractères Unicode plus polyvalent et plus robuste, qui prend en charge plus de 128 000 caractères dans les scripts et jeux de symboles contemporains et historiques, vous devez taperu"Hello, Sammy!", avec le préfixeu représentant Unicode.

Python 3 utilise Unicode par défaut, ce qui permet aux programmeurs de gagner un temps de développement supplémentaire, et vous pouvez facilement taper et afficher beaucoup plus de caractères directement dans votre programme. Étant donné que Unicode prend en charge une plus grande diversité de caractères linguistiques ainsi que l'affichage d'émoticônes, son utilisation en tant que codage de caractères par défaut garantit la prise en charge des périphériques mobiles du monde entier dans vos projets de développement.

Si vous souhaitez que votre code Python 3 soit rétrocompatible avec Python 2, vous pouvez conserver lesu avant votre chaîne.

Développement continu

La plus grande différence entre Python 3 et Python 2 n’est pas syntaxique, mais le fait que Python 2.7 perdra sa prise en charge continue en 2020 et que Python 3 continuera d’être développé avec davantage de fonctionnalités et de corrections de bugs.

Les développements récents ont inclusformatted string literals, une personnalisation plus simple declass creation et une manière syntaxique plus propre de gérer la multiplication matricielle.

Le développement continu de Python 3 signifie que les développeurs peuvent compter sur la résolution rapide des problèmes et que les programmes peuvent être plus efficaces grâce à une fonctionnalité accrue intégrée au fil du temps.

Points supplémentaires à considérer

En tant que débutant en langage Python ou en tant que programmeur expérimenté dans le langage Python, vous voudrez peut-être envisager ce que vous espérez accomplir en apprenant ce langage.

Si vous souhaitez simplement apprendre sans projet défini, vous voudrez probablement prendre en compte le fait que Python 3 continuera à être pris en charge et développé, contrairement à Python 2.7.

Si, toutefois, vous envisagez de rejoindre un projet existant, vous voudrez probablement savoir quelle version de Python est utilisée par l'équipe, comment une autre version peut-elle interagir avec la base de code héritée, si les packages utilisés par le projet sont pris en charge version différente, et quels sont les détails de la mise en œuvre du projet.

Si vous commencez un projet que vous avez à l'esprit, il serait intéressant de rechercher quels packages sont disponibles à utiliser et avec quelle version de Python ils sont compatibles. Comme indiqué ci-dessus, bien que les versions précédentes de Python 3 aient moins de compatibilité avec les bibliothèques construites pour les versions de Python 2, beaucoup ont été transférées sur Python 3 ou se sont engagées à le faire au cours des quatre prochaines années.

Conclusion

Python est un langage de programmation polyvalent et bien documenté à apprendre. Que vous choisissiez de travailler avec Python 2 ou Python 3, vous serez en mesure de travailler sur des projets logiciels passionnants.

Bien qu'il existe plusieurs différences clés, il n'est pas trop difficile de passer de Python 3 à Python 2 avec quelques ajustements, et vous constaterez souvent que Python 2.7 peut facilement exécuter du code Python 3, en particulier lorsque vous débutez. Vous pouvez en savoir plus sur ce processus en lisant le tutorielHow To Port Python 2 Code to Python 3.

Il est important de garder à l'esprit que plus l'attention des développeurs et de la communauté sera concentrée sur Python 3, le langage deviendra plus précis et plus conforme aux besoins en constante évolution des programmeurs, et Python 2.7 sera moins pris en charge.