Maison >développement back-end >Tutoriel Python >[Tutoriel Python] La différence entre les versions Python2.x et 3.x

[Tutoriel Python] La différence entre les versions Python2.x et 3.x

黄舟
黄舟original
2016-12-24 15:44:451439parcourir

La différence entre les versions Python 2.x et 3.x

La version 3.0 de Python est souvent appelée Python 3000, ou Py3k en abrégé. Il s'agit d'une mise à niveau majeure par rapport aux versions précédentes de Python.

Afin de ne pas alourdir trop de charge, Python 3.0 n'a pas été conçu dans un souci de compatibilité descendante.

De nombreux programmes conçus pour les versions antérieures de Python ne peuvent pas fonctionner correctement sur Python 3.0.

Afin de prendre en charge les programmes existants, Python 2.6 est une version de transition qui utilise essentiellement la syntaxe et les bibliothèques de Python 2.x. Elle envisage également la migration vers Python 3.0 et permet l'utilisation de certains Python 3.0. syntaxe et fonctions.


Il est recommandé aux nouveaux programmes Python d'utiliser la syntaxe de la version Python 3.0.


À moins que l'environnement d'exécution ne puisse installer Python 3.0 ou que le programme lui-même utilise une bibliothèque tierce qui ne prend pas en charge Python 3.0. Les bibliothèques tierces qui ne prennent actuellement pas en charge Python 3.0 incluent Twisted, py2exe, PIL, etc.

La plupart des bibliothèques tierces travaillent dur pour être compatibles avec la version Python 3.0. Même si Python 3.0 ne peut pas être utilisé immédiatement, il est recommandé d'écrire un programme compatible avec Python 3.0 puis de l'exécuter en utilisant Python 2.6 ou Python 2.7.

Principaux changements

Les changements dans Python 3.0 concernent principalement les aspects suivants :

L'instruction print a disparu, remplacée par la fonction print(). Python 2.6 et Python 2.7 prennent partiellement en charge cette forme de syntaxe d'impression. Dans Python 2.6 et Python 2.7, les trois formes suivantes sont équivalentes :

print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数

Cependant, Python 2.6 prend en charge la nouvelle syntaxe print() :

from __future__ import print_function
print("fish", "panda", sep=', ')

new La catégorie str représente une chaîne Unicode, équivalente à la catégorie unicode dans la version Python 2.x. La séquence d'octets est représentée par une syntaxe similaire à b"abc" et représentée par la classe bytes, qui est équivalente à la classe str de Python 2.x.

Les deux catégories ne peuvent plus être automatiquement converties implicitement, donc "fish" b"panda" est une erreur dans Python 3.x. La bonne façon de l'écrire est "fish" b"panda".decode("utf-8"). Python 2.6 peut reconnaître automatiquement une séquence d'octets comme une chaîne Unicode par :

from __future__ import unicode_literals
print(repr("fish"))

L'opérateur de division "/" renvoie toujours un nombre à virgule flottante dans Python 3.x. Dans Python 2.6, il sera jugé si le dividende et le diviseur sont des entiers. S'il s'agit d'un nombre entier, il renverra une valeur entière, ce qui équivaut à une division entière ; s'il s'agit d'un nombre à virgule flottante, il renverra une valeur à virgule flottante.

Pour que Python 2.6 renvoie uniformément des valeurs à virgule flottante, vous pouvez :

from __future__ import division
print(3/2)

La syntaxe de capture des exceptions est modifiée de except exc, var à except exc en tant que var. Utilisez la syntaxe except (exc1, exc2) comme var pour intercepter plusieurs catégories d'exceptions en même temps. Python 2.6 prend déjà en charge les deux syntaxes.

Nouvelle façon d'écrire l'ensemble : {1,2,3,4}. Notez que {} représente toujours un dictionnaire vide (dict).

Compréhensions de dictionnaire {expr1 : expr2 pour k, v in d}, cette syntaxe est équivalente à

result={}
for k, v in d.items():
    result[expr1]=expr2
return result

Définir les compréhensions {expr1 pour x dans stuff}. Cette syntaxe est équivalente à :

result = set()
for x in stuff:
    result.add(expr1)
return result

Le nombre octal doit être écrit sous la forme 0o777. La forme originale 0777 ne peut pas être utilisée ; le nombre binaire doit être écrit sous la forme 0b111. Une nouvelle fonction bin() est ajoutée pour convertir un entier en chaîne binaire. Python 2.6 prend déjà en charge les deux syntaxes.

dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip() ne renvoient plus des listes, mais des itérateurs.

S'il n'y a pas d'ordre significatif bien défini entre deux objets. Les comparer à l’aide de 95ec6993dc754240360e28e0de8de30a, d2e24fbfa3a7d998970671c0359d3643= lèvera une exception. Par exemple, 1 < "" renverra True dans Python 2.6, mais lèvera une exception dans Python 3.0. Désormais, les fonctions cmp(), instance.__cmp__() ont été supprimées.

Vous pouvez annoter les paramètres et renvoyer les valeurs de la fonction. Cette fonctionnalité permet à l'EDI d'effectuer une analyse plus approfondie du code source. Par exemple, ajoutez des informations de catégorie aux paramètres :

def sendMail(from_: str, to: str, title: str, body: str) -> bool:
    pass

Fusionner les types int et long.

Plusieurs modules ont été renommés (selon PEP8) :

Ancien nom

Nouveau nom

_winreg winreg

ConfigParser configparser

copy_reg copyreg

Queue queue

SocketServer socket server

repr reprlib

Le Le module StringIO est maintenant fusionné dans le nouveau module io. Les nouveaux modules md5, gopherlib et autres ont été supprimés. Python 2.6 prend déjà en charge le nouveau module io.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib sont fusionnés dans le package http.

L'instruction exec est annulée, ne laissant que la fonction exec(). Python 2.6 prend déjà en charge la fonction exec().

Ce qui précède est le contenu du [tutoriel Python] sur les différences entre les versions Python 2.x et 3.x. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn). !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn