Dans le monde de la programmation, Python est l’un des langages les plus populaires et polyvalents. Cependant, il existe deux versions majeures de ce langage : Python 2 et Python 3. Bien que ces deux versions soient très similaires dans leur fonctionnement, elles présentent aussi quelques différences notables qui peuvent entraîner des problèmes lors de l’exécution et la compatibilité du code.
Dans cet article, nous allons explorer les principales différences entre Python 2 et Python 3 et voir comment elles impactent les développeurs.
Les différences syntaxiques entre Python 2 et Python 3
L’une des différences les plus évidentes entre Python 2 et Python 3 concerne la syntaxe du langage. Voici quelques exemples des changements syntaxiques majeurs entre les deux versions :
- La fonction print : En Python 2, “print” est une instruction qui peut être utilisée sans parenthèses, tandis qu’en Python 3, il s’agit d’une fonction nécessitant l’utilisation de parenthèses. Par exemple :
Python 2 :
print "Bonjour le monde !"
Python 3 :
print("Bonjour le monde !")
- La division entière : En Python 2, le symbole de division (“/”) réalise une division entière si les deux opérandes sont des entiers. En Python 3, il effectue toujours une division décimale (division “florente”). Pour obtenir une division entière en Python 3, on doit utiliser le double symbole de division (“//”) :
Python 2 :
7 / 3 # Résultat : 2 7 / 3.0 # Résultat : 2.33333333333
Python 3 :
7 / 3 # Résultat : 2.33333333333 7 // 3 # Résultat : 2
Gestion des exceptions
Les exceptions sont un élément essentiel de la gestion d’erreur dans toute application. Dans ce domaine, Python 2 et Python 3 diffèrent également. La principale différence est la syntaxe utilisée pour attraper et gérer les exceptions.
- Python 2 : Dans cette version, la syntaxe pour attraper les exceptions utilise le mot-clé ” as” :
try : # code susceptible de générer une exception except ExceptionType1, e : # gestion de l'exception ici except ExceptionType2, e : # gestion de l'autre exception ici
- Python 3 : Ici, le mot-clé ” as” n’est plus utilisé :
try : # code susceptible de générer une exception except ExceptionType1 as e : # gestion de l'exception ici except ExceptionType2 as e : # gestion de l'autre exception ici
Les différences liées à l’utilisation des chaînes de caractères
Les deux versions de Python gèrent également les chaînes de caractères différemment, particulièrement en ce qui concerne leur encodage et la manière dont elles sont représentées.
Autre : Comment Python Révolutionne Excel :
Python 2 : Chaînes ASCII par défaut
Dans cette version, les chaînes de caractères sont des séquences d’octets. Par défaut, elles utilisent l’encodage ASCII, mais peuvent aussi utiliser d’autres encodages lorsqu’on utilise le préfixe “u” devant une chaîne (par exemple u”Bonjour”). Les principales limitations sont que les caractères Unicode ne sont pas supportés directement :
s = "Bonjour le monde !" type(s) # Résultat : <type 'str'=""> t = u"こんにちは世界!" type(t) # Résultat : <type 'unicode'="">
Python 3 : Chaînes Unicode par défaut
Toutes les chaînes de caractères sont des séquences Unicode dans Python 3. Ainsi, il n’est plus nécessaire d’utiliser le préfixe ” u” pour indiquer qu’une chaîne est en Unicode :
s = "Bonjour le monde !" type(s) # Résultat : <class 'str'=""> t = "こんにちは世界!" type(t) # Résultat : <class 'str'="">
Cette nouveauté facilite grandement la gestion des caractères internationaux dans les applications développées avec Python 3.
La fonction range()
En Python, la fonction “range()” est couramment utilisée pour générer des séquences d’entiers à parcourir dans une boucle. Cependant, cette fonction présente quelques différences notables entre Python 2 et Python 3.
Python 2 : range() vs xrange()
Dans Python 2, on trouve deux fonctions pour générer des séquences d’entiers :
- range() : Cette fonction retourne une liste d’entiers. Elle peut générer des séquences importantes en mémoire, surtout sur de grandes listes.
- xrange() : À l’inverse, cette fonction retourne un objet “xrange” qui génère les nombres à la volée, sans occuper de place en mémoire. Elle est donc préférable lorsque l’on doit travailler avec de grands intervalles.
for i in range(10) : print(i) # Génère une liste de taille 10 for i in xrange(10) : print(i) # Utilise moins de mémoire mais affiche le même résultat
Python 3 : range() remplace xrange()
La fonction xrange() disparaît totalement en Python 3 et ses fonctionnalités sont intégrées directement à la fonction range(). Ainsi, il suffit d’utiliser cette dernière pour obtenir un comportement similaire à celui qu’offrait xrange() en Python 2 :
for i in range(10) : print(i) # Pas besoin d'utiliser xrange(), cette version utilise moins de mémoire par défaut
En résumé
Il existe de nombreuses différences entre Python 2 et Python 3, notamment en ce qui concerne la syntaxe du langage, la gestion des exceptions, l’utilisation des chaînes de caractères et la fonction range(). lire ces différences peut entraîner des problèmes lors de l’exécution et la compatibilité du code d’une version à l’autre. Il est donc essentiel pour les développeurs de bien comprendre ces distinctions afin d’éviter tout problème au sein de leur projet.
A savoir : Où se former sur Python pour devenir développeur ?