Modification de Python 2.x.x avec Python 3.x.x & méthode de conversion de Python 2.x.x en Python 3.x.x

Auteur:Le petit rêve, Créé: 2016-10-09 12:36:49, Mis à jour: 2017-10-11 10:18:05

Les différences syntaxiques entre python2 et python3

Pratiquement tous les programmes Python 2 nécessitent des modifications pour fonctionner correctement dans un environnement Python 3. Pour simplifier ce processus de conversion, Python 3 est livré avec un script utilitaire appelé 2to3, qui prend votre fichier source Python 2 comme entrée, puis le convertit automatiquement en Python 3.

  • Les phrases imprimées

Dans Python 2, print est une phrase. Tout ce que vous voulez exprimer, vous pouvez le placer juste après le mot clé print. Dans Python 3, print est une fonction. Comme pour toutes les autres fonctions, print exige que vous lui transmettiez ce que vous voulez exprimer en tant qu'argument.

Nom de l'entreprise Python 2 Python 3
imprimer imprimer
imprimer 1 imprimer le texte (1)
1, 2 imprimer Imprimé ((1,2)
imprimer 1, 2, print ((1,2,end= ")
Il est possible d'envoyer un message à l'adresse suivante: Il n'y a pas d'autre moyen de le faire.

1, pour produire une ligne blanche, vous devez appeler print sans paramètres ((((((( 2, Pour produire une valeur distincte, il est nécessaire de l'utiliser comme un paramètre print (). 3 ∞ Les deux valeurs séparées par un espace sont utilisées pour l'extraction et peuvent être appelées print ((() avec deux paramètres. Dans Python 2, si vous utilisez une virgule (,) à la fin d'une phrase de print, elle sort le résultat séparé par un espace de trailing, sans retour de voiture. Dans Python 3, le même effet peut être obtenu en transmettant end = comme un paramètre de mot clé à print. Dans Python 2, vous pouvez rediriger la sortie vers un pipeline en utilisant la syntaxe >pipe_name, par exemple sys.stderr. Dans Python 3, vous pouvez faire la même chose en transmettant la valeur du pipeline à print comme la valeur du fichier de paramètres du mot clé. La valeur par défaut du fichier de paramètres est std.stdout, de sorte que la réindication de sa valeur permettra à print d'exporter vers un autre fichier.

  • Chaîne Unicode

Python 2 propose deux types de chaînes:Chaîne UnicodeetChacune de ces chaînes n'est pas en Unicode.Il n'y a qu'un seul type dans Python 3:Les chaînes Unicode

Nom de l'entreprise Python 2 Python 3
Je suis un homme de parole. Le fouet de papaye
Je ne sais pas. - Je ne sais pas.

Les chaînes Unicode de Python 2 sont des chaînes ordinaires de Python 3, car les chaînes de Python 3 sont toujours en forme Unicode. Les chaînes de caractères originales Unicode ("raw string") ("Python ne traduit pas automatiquement l'inverse de la diagonale" en utilisant cette chaîne) ont également été remplacées par des chaînes normales, car dans Python 3, toutes les chaînes originales sont encodées en Unicode.

  • Fonction mondiale unicode

Python 2 dispose de deux fonctions globales qui peuvent forcer la conversion d'un objet en une chaîne: unicode ((() qui convertit l'objet en une chaîne Unicode, et str ((() qui convertit l'objet en une chaîne non Unicode. Python 3 n'a qu'un seul type de chaîne, une chaîne Unicode, donc la fonction str ((() peut effectuer toutes les fonctions.La fonction unicode ((() n'existe plus dans Python 3.)

Nom de l'entreprise Python 2 Python 3
Unicode (tout) Je ne sais pas.
  • long est un entier

Python 2 a des types int et long pour les nombres non floating-point. Le maximum de type int ne peut pas dépasser sys.maxint, et ce maximum est lié à la plate-forme. On peut définir un type d'entier long en ajoutant un L à la fin du nombre. Il est évident qu'il a une gamme numérique plus large que celle indiquée par le type int.

Pour en savoir plus: PEP 237: Unifier les formes entières et les formes entières.

Nom de l'entreprise Python 2 Python 3
x = 1000000000000L Le montant de la garantie est calculé à partir du montant de la garantie.
Le nombre d'heures d'essai est calculé en fonction de la fréquence de l'essai. Le nombre d'émissions de CO2 est déterminé par la méthode suivante:
long ((x) int (x)
type ((x) est long type ((x) est int
estinstance ((x,long) estinstance ((x,int)

Les entiers décimaux en Python 2 sont remplacés par des entiers ordinaires décimaux en Python 3. Dans Python 2, l'entier à 16 chiffres est remplacé par l'entier normal à 16 chiffres dans Python 3. Dans Python 3, il n'y a plus de formes entières, donc il n'y a plus de formes entières.Les fonctions long (() n'existent plus. Pour forcer la conversion d'une variable en type entier, on peut utiliser la fonction int (().Je ne sais pas. Vérifie si une variable est de type entier, obtient son type de données et la compare à un type int (pas long). Vous pouvez également utiliser l'instance (() pour vérifier le type de données; une fois de plus, pour vérifier le type d'entiers, utilisez int, et non long.

  • L'opérateur de comparaison

Python 2 prend en charge <> comme synonyme de!=. Python 3 ne prend en charge que!= et ne prend plus en charge <>.

Nom de l'entreprise Python 2 Python 3
si x <> y: si x! = y:
si x <> y<> z: si x!= y!= z:

1, simple comparaison. 2, une comparaison entre trois valeurs relativement complexes.

  • Les méthodes de classe de dictionnaire ont_key ())

Dans Python 2, la méthode has_key (), utilisée pour tester si un dictionnaire contient une clé spécifique, n'est plus prise en charge par Python 3.dansL'opérateur?.

Nom de l'entreprise Python 2 Python 3
Il a un dictionnaire. PapayaWhip dans un_dictionnaire
a_dictionary.has_key (x) ou a_dictionary.has_key (y) x dans un dictionnaire ou y dans un dictionnaire
a_dictionary.has_key ((x ou y) (x ou y) dans un dictionnaire
a_dictionary.has_key ((x + y) (x + y) dans un dictionnaire
x + a_dictionary.has_key ((y) x + (y dans un dictionnaire)

1, la forme la plus simple. 2, l'opérateur or a une priorité inférieure à celle de l'opérateur in, il n'est donc pas nécessaire d'ajouter de parenthèses ici. 3, d'autre part, pour la même raison, la priorité de or est inférieure à in, ce qui nécessite l'ajout de parenthèses. Nota: le code ici est complètement différent de celui de la ligne précédente. Python interprète d'abord x ou y pour obtenir le résultat x (si x est vrai dans le contexte de Boole) ou y. 4, l'opérateur in a une priorité inférieure à celle de l'opérateur +, donc cette forme dans le code n'a pas besoin de parenthèses, mais 2 à 3 est ajouté. Cette forme nécessite des parenthèses car la priorité de in est inférieure à celle de +//.

  • Les méthodes de classe de dictionnaire pour retourner la liste

Dans Python 2, les valeurs de retour de nombreuses méthodes de classe de dictionnaire sont des listes. Parmi les méthodes les plus couramment utilisées, il y a des clés, des éléments et des valeurs. Dans Python 3, les valeurs de retour de toutes les méthodes ci-dessus sont converties en une vue dynamique. Dans certains environnements contextuels, cette modification n'a pas d'effet.

Nom de l'entreprise Python 2 Python 3
a_dictionnaire.clés Liste (un dictionnaire)
a_dictionary.items (en anglais seulement) Liste (un dictionnaire)
a_dictionary.iterkeys (en anglais) Il est temps de revenir à l'origine.
[i pour iin a_dictionary.iterkeys() ] [i pour iin a_dictionary.keys() ]
Je ne sais pas comment faire. Pas de changement

La fonction 1, utilisant la liste (((), convertit la valeur de retour de keys ((() en une liste statique. Pour des raisons de sécurité, 2to3 peut être un erreur. Ce type de code est efficace, mais il est moins efficace pour l'utilisation de la vue. Vous devriez vérifier le code après la conversion pour voir si vous avez besoin d'une liste, peut-être que la vue peut faire la même chose. 2, c'est une autre façon de voir la conversion de la méthode ((concernant les éléments)) vers la liste. 3, Les itérkeys ne sont plus pris en charge dans Python 3. Si nécessaire, utilisez itér pour convertir la valeur de retour des keys en un iterateur. La méthode 4, 2to3 est capable de reconnaître que des itérkeys (//) sont utilisés dans la analyse de la liste, puis de les convertir en keys (//) dans Python 3 (//) sans avoir besoin d'utiliser d'iter supplémentaire (//) pour emballer la valeur de retour). La valeur de retour de la méthode 5, 2to3 qui reconnaît également les keys (()) est immédiatement transmise à une autre fonction qui parcourt toute la séquence, il n'est donc pas nécessaire de convertir la valeur de retour de keys (()) dans une liste. Au contraire, la fonction min (()) est heureuse de parcourir la vue.

  • Modules renommés ou réorganisés

De Python 2 à Python 3, certains modules de la bibliothèque standard ont été renommés. D'autres modules interconnectés ont également été regroupés ou réorganisés pour rendre cette association plus logique.

  • Je ne sais pas. Dans Python 3, plusieurs modules HTTP associés sont regroupés en un seul package, http.
Nom de l'entreprise Python 2 Python 3
Importer le code httplib Importer le client http.client
Importer le cookie Importer des cookies http.
importation de cookieslib Importer le fichier http.cookiejar
Le serveur de baseHTTPS est un serveur de baseHTTPS. Importer le serveur http.

Le module http.client implémente une bibliothèque sous-jacente qui peut être utilisée pour demander des ressources HTTP et analyser les réponses HTTP. Le module http.cookies fournit une interface Python pour récupérer les cookies envoyés par l'intermédiaire de l'en-tête HTTP. Les navigateurs populaires stockent les cookies sous forme de fichiers sur le disque, qui peuvent être manipulés par le module http.cookiejar. Le module http.server implémente un serveur HTTP de base

  • Je ne sais pas. Python 2 possède des modules pour analyser, encoder et obtenir des URL, mais ces modules se chevauchent comme des souris. Dans Python 3, ces modules sont restructurés et assemblés en un seul package, urllib.
Nom de l'entreprise Python 2 Python 3
Importer une adresse importation urllib.request
urllib.parse,urllib.error
Importation de l'URLlib2 Importation du fichier urllib.request
Importer une adresse Importer le fichier
Importer le robot parser Importer l'urllib.robotparser
depuis urllib import FancyURLopener
depuis urllib import urlencode
depuis urllib.request import FancyURLopener
depuis urllib.parse import urlencode
depuis urllib2 import Demande
depuis urllib2 import HTTPError
depuis urllib.request import Demande
depuis urllib.error import HTTPError

Auparavant, le module urllib de Python 2 possédait une variété de fonctions, y compris urlopen, qui était utilisé pour obtenir des données, et il était également utile de diviser les URL en fonctionnalités de splittype, splithost et splituser. Dans le nouveau paquet urllib, ces fonctions sont organisées de manière plus logique. Dans Python 3, les modules urllib2 précédents ont été incorporés dans le paquet urllib. Dans le même temps, dans urllib2, toutes sortes de choses que vous aimez apparaîtront dans les modules urllib de Python 3, telles que les méthodes build_opener (), les objets de demande, HTTPBasicAuthHandler et friends (). Le module urllib.parse de Python 3 contient toutes les fonctions de partage du module urlparse de Python 2. Le module urllib.robotparse analyse le fichier robots.txt. La classe FancyURLopener, qui traite les redirections HTTP et autres codes d'état, est toujours valide dans le module urllib.request de Python 3. L'objet Request est toujours valide dans urllib.request, mais des constantes telles que HTTPError ont été déplacées dans urllib.error. Ai-je mentionné que 2to3 réécrirait également vos appels à des fonctions? Par exemple, si vous importez un module urllib dans votre code Python 2 et que vous appelez la fonction urllib.urlopen))) pour obtenir des données, 2to3 modifie les phrases d'importation et les appels à des fonctions en même temps.

Nom de l'entreprise Python 2 Python 3
Le texte de l'annexe I est remplacé par le texte suivant:http://diveintopython3.org/’) lire)) import urllib.request, urllib.parse, urllib.error
print ((urllib.request.urlopen)) "http://diveintopython3.org/’) lire))
  • - Je ne sais pas. Tous les clones de DBM sont désormais dans un paquet distinct, appelé dbm. Si vous avez besoin d'une variante spécifique de celui-ci, comme GNUDBM, vous pouvez importer le module approprié dans le paquet dbm.
Nom de l'entreprise Python 2 Python 3
importation de données Importation de données
importation de gdbm importationdbm.gnu
Importer dbhash Importation dbm.bsd
Importer du Dumbdbm Importation de données.
Importation de tout ce qui est importation de données
  • Le code est le même. XML-RPC est une méthode légère pour exécuter des appels RPC à distance via le protocole HTTP. Certaines des bibliothèques d'implémentation du client XML-RPC et du serveur XML-RPC sont maintenant regroupées en un package indépendant, xmlrpc.
Nom de l'entreprise Python 2 Python 3
Importer le fichier xmlrpclib Importer le fichier xmlrpc.client
Importer DocXMLRPCServer
Importer SimpleXMLRPCServer
Importer le serveur xmlrpc.
  • Autres modules

Nom de l'entreprise Python 2 Python 3
essayez:
importez cStringIO comme StringIO
sauf ImportError:
importez StringIO
Importation
essayez:
importez cPickle en tant que cornichon
sauf ImportError:
importez cornichon
les cornichons importés
ImporterConstruit Importer des bâtiments
Importer le code Importation de copie
file d'attente d'importation file d'attente d'importation
Importer SocketServer Importer le serveur de sockets
Importer le paramètre de configuration Importer le paramètre de configuration
Le rapport annuel import reprlib
commandes d'importation sous-processus d'importation

Dans Python 2, vous essayez d'abord d'importer cStringIO comme alternative à StringIO, et si cela échoue, importez StringIO. Ne faites pas cela dans Python 3; le module io vous aidera à le faire. Dans Python 2, l'importation de l'implémentation pickle la plus rapide est également une méthode utilisable similaire à celle ci-dessus. Dans Python 3, le module pickle traite automatiquement pour vous, alors ne le faites plus. Le module de construction contient des fonctions globales, des classes et des constantes qui sont utilisées dans toute la langue Python. Une fonction dans le module de construction redéfinie signifie que cette fonction globale est redéfinie partout. Cela semble puissant, mais aussi terrible. 4, le module copyreg ajoute la prise en charge du module pickle pour les types personnalisés par les utilisateurs définis en C. Le module 5 de la queue réalise une file d'attente multi-producteur, multi-consommateur. Le module Socketserver fournit une classe de base générale pour la mise en œuvre de divers serveurs de sockets. 7, le module de configuration parser est utilisé pour analyser les profils INI-style. Le module 8 reprlib ré-implémente la fonction repr (), et ajoute des contrôles sur la longueur de la représentation de la chaîne avant son interception. Les modules de sous-processus vous permettent de créer des sous-processus, de les connecter à leurs pipelines et d'obtenir leurs valeurs de retour.

  • Importation relative dans le paquet

Les paquets sont des entités uniques composées d'un ensemble de modules associés. Dans Python 2, vous utilisez import foo ou from foo import Bar pour faire référence aux modules de la même palette.2解释器会先在当前目录里搜索foo.pyDans Python 3, le processus est un peu différent. Python 3 ne recherche pas d'abord le chemin actuel, il le recherche directement dans le chemin de recherche de Python. Si vous voulez importer un module dans un paquet dans un autre module, vous devez fournir explicitement le chemin relatif des deux modules.

Supposons que vous ayez le package suivant, plusieurs fichiers dans le même répertoire:

- Je ne sais pas. Je ne sais pas. À l'intérieurinit.py Je ne sais pas.+--constantes.py | +--mbcharsetprober.py Il est temps de le faire. | +--détecteur universel.py

Supposons maintenant que l'universaldetector.py nécessite l'importation de constants.py entiers,另外还需要导入mbcharsetprober.py的一个类。你会怎样做?

Nom de l'entreprise Python 2 Python 3
les constantes d'importation à partir des constantes.import
depuis mbcharsetprober import MultiByteCharSetProber depuis.mbcharsetprober import MultiByteCharsetProber

1, lorsque vous devez importer l'ensemble du module d'ailleurs dans le paquet, utilisez la nouvelle syntaxe from.import.universaldetector.py> > > > > > > > > > > > > > > > > > > > > > >constants.pyDans cet exemple, les deux fichiers se trouvent dans le même répertoire, donc une seule syllabe est utilisée. Vous pouvez également importer à partir du répertoire parental ((from... import anothermodule) ou du sous-répertoire. Pour importer une classe ou une fonction spécifique d'un autre module directement dans l'espace de noms de votre module, ajoutez le chemin relatif au début du module à importer et supprimez la dernière barre (slash). Dans cet exemple, mbcharsetprober.py et universaldetector.py sont dans le même répertoire, donc le nom du chemin relatif est un point. Vous pouvez également importer du répertoire parent (from... import anothermodule) ou du répertoire enfant.

  • La méthode de l'irradiateur est la suivante

Dans Python 2, l'irradiateur a une méthode next (), qui permet de retourner le prochain élément de la séquence. Dans Python 3, cela fonctionne de la même manière, mais il existe maintenant une nouvelle fonction globale next (), qui utilise un iradiateur comme paramètre.

Nom de l'entreprise Python 2 Python 3
Je vais vous aider. Je suis en train d'écrire.
a_function_that_returns_an_iterator (().next (() est une fonction qui retourne un_iterator ()) next ((une fonction qui renvoie un itérateur))
classe A:
def next ((self):
passe
classe A:Le suivant.(même):
passer à côté
classe A:
def next ((self, x, y):
passe
Pas de changement
next = 42
pour un_itérateur dans une_séquence_d'itérateurs:
an_itérateur.next()
pour un_itérateur dans une_séquence_d'itérateurs:
un_itérateur._Le suivant.()

Dans l'exemple le plus simple, vous n'appelez plus la méthode de l'intermédiaire next (), mais vous passez l'intermédiaire lui-même en tant qu'argument à la fonction globale next (). 2, si vous avez une valeur de retour qui est une fonction de l'irradiateur, appelez cette fonction et passez le résultat en tant que paramètre à la fonction next (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 3 Si vous prenez votre propre classe et que vous l'utilisez comme un iterateur, dans Python 3, vous pouvez définir des méthodes spéciales.Le suivant.Le projet a été réalisé par un groupe d'étudiants. 4, si vous définissez une classe qui contient un ou plusieurs paramètres, 2to3 ne l'exécutera pas. Cette classe ne peut pas être utilisée comme un iterateur car sa méthode next () contient des paramètres. 5, c'est un peu compliqué. Si vous avez une variable locale nommée next, dans Python 3, elle a une priorité supérieure à celle de la fonction globale next (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))Le suivant.Vous pouvez également réorganiser le code pour que la variable locale n'ait pas le nom de next, mais 2to3 ne le fera pas pour vous.

  • Filtre de fonction globale

Dans Python 2, la méthode filter ((() renvoie une liste qui est obtenue en détectant chaque élément de la séquence par une fonction qui renvoie une valeur True ou False.

Nom de l'entreprise Python 2 Python 3
filtrage ((a_function, a_sequence) liste (filtre) (fonction, séquence)
liste (filtre) (fonction, séquence) Pas de changement
Filtre ((Aucun, une_séquence) [i pour iin a_sequence si i]
pour i dans le filtre ((None, a_sequence): Pas de changement
[i pour le filtre (une fonction, une séquence) ] Pas de changement

Dans le cas le plus simple, 2to3 utilise une fonction list ()) pour emballer le filtre (), et la fonction list ()) traverse ses paramètres pour retourner une liste. 2, cependant, si l'appel filter (()) a été enveloppé par list ((), 2to3 ne traite plus, car dans ce cas, il n'est pas important de savoir si la valeur de retour du filtre (()) est un iterateur. Pour traiter une syntaxe particulière telle que filter (None,...) 2to3 convertit cette appelée de manière syntaxiquement équivalente en analyse de liste. 4, puisque la boucle for traverse la séquence entière, il n'est pas nécessaire de faire d'autres modifications. 5, comme ci-dessus, aucune modification n'est nécessaire, car la liste est analysée sur toute la séquence, et même si le filtre () retourne à un iterateur, il fonctionnera toujours comme le filtre () précédent qui retourne à la liste.

  • La fonction globale map

Comme pour la modification de filter (), la fonction map (), qui retourne maintenant un iterateur.

Nom de l'entreprise Python 2 Python 3
Une carte (une fonction) Liste (carte) (fonction)
Une carte (None, Papaya Whip) Liste (Papaya Whip)
La carte (lambda x: x+1, plage (x) 42) [x+1 pour x dans la plage ((42) ]
pour i dans la carte ((a_function, a_sequence): Pas de changement
[i pour une carte (une fonction, une séquence) ] Pas de changement

Dans le cas le plus simple, 2to3 utilise une fonction list pour envelopper l'appel map. 2、 pour une syntaxe spécifique de map ((None,...) similaire à celle du filtre ((None,...) 2to3 la convertit en une appellation équivalente à l'utilisation de list ((( 3, si le premier paramètre de map () est une fonction lambda, 2to3 le convertit en parallèle à une liste de résolution. 4° Pour les boucles for qui traversent toute la séquence, aucune modification n'est nécessaire. 5, encore une fois, il n'est pas nécessaire d'y apporter de modifications, car la liste parcourt toute la séquence et fonctionne correctement même si la valeur de retour de map ((() est l'irradiateur et non la liste.

  • La fonction globale réduit (((

En Python 3, la fonction réduire (), qui a été supprimée de l'espace de noms global, est maintenant placée dans le module fucntools.

Nom de l'entreprise Python 2 Python 3
réduire ((a, b, c) de l'importation des outils fonctionnels réduire réduire
  • La fonction globale apply ((()

Python 2 possède une fonction globale appelée apply() qui utilise une fonction f et une liste [a, b, c] comme paramètres, et qui renvoie la valeur f ((a, b, c)). Vous pouvez également faire la même chose en appelant directement cette fonction et en y ajoutant un astérisque ((*) comme paramètre passé devant la liste. Dans Python 3, la fonction apply( n'existe plus; vous devez utiliser le marquage des astérisques.

Nom de l'entreprise Python 2 Python 3
appliquer ((a_function, a_list_of_args) a_function ((*a_list_of_args) est une fonction
appliquer ((une_fonction, une_liste_d'arguments, un_dictionnaire_d'arguments nommés) a_function ((*une_liste_d'arguments,**un_dictionnaire_d'arguments nommés)
appliquer ((a_function, a_list_of_args+ z) a_function ((*a_list_of_args+z) est une fonction
appliquer ((aModule.a_function, a_list_of_args) aModule.a_function ((* une_liste_d'arguments)

1, la forme la plus simple, peut être appelée en ajoutant un astérisque devant la liste d'arguments (comme [a, b, c]) ; c'est l'équivalent de la fonction apply (apply) dans Python 2. Dans Python 2, la fonction apply peut en fait contenir trois paramètres: une fonction, une liste de paramètres, un dictionnaire d'arguments nommés. Dans Python 3, vous pouvez ajouter un astérisque avant la liste de paramètres.Pour obtenir le même effet, deux astérisques sont ajoutés avant les paramètres de nom de dictionnaire. 3, l'opérateur + est utilisé ici comme une fonction de liste de connexion, et il a une priorité supérieure à l'opérateurIl n'est donc pas nécessaire d'ajouter des parenthèses supplémentaires autour de a_list_of_args + z. Les scripts 4 et 2 à 3 sont assez intelligents pour convertir des applies complexes, y compris des appels à des fonctions importées dans des modules.

  • Fonction globale interne

Dans Python 2, vous pouvez limiter la fonction interne à une chaîne en utilisant l'action interne pour optimiser les performances. Dans Python 3, la fonction interne est transférée dans le module sys.

Nom de l'entreprise Python 2 Python 3
interné (aString) Sys.intern (une chaîne de caractères)
  • Exécutable

Tout comme la phrase print devient une fonction dans Python 3, la phrase exec utilise une chaîne contenant n'importe quel code Python comme paramètre, puis l'exécute comme une phrase ou une expression exécutée. Elle est similaire àeval, mais elle est plus puissante et plus ingénieuse.

Nom de l'entreprise Python 2 Python 3
le code execString Je ne sais pas si c' est vrai.
code execStriche dans l'espace de noms global exec ((codeString, espace de noms global)
code execStriche dans un espace de noms global, un espace de noms local exec ((codeString, un espace de noms global, un espace de noms local)

1, dans sa forme la plus simple, puisque exec ((() est maintenant une fonction plutôt qu'une phrase, 2 à 3 entoure ce code en forme de chaîne de caractères par des parenthèses. 2, les statements exec de Python 2 peuvent spécifier un espace de noms, le code s'exécutera dans cet espace privé composé d'objets globaux. Python 3 a également cette fonction; vous avez juste besoin de passer cet espace de noms comme deuxième paramètre à la fonction exec (). 3, plus étonnamment, l'instruction exec de Python 2 peut également spécifier un espace de noms local (par exemple, une variable déclarée dans une fonction).

  • Exécutable

Comme pour les expressions exec précédentes, les expressions execfile de Python 2 peuvent également utiliser des chaînes comme pour exécuter du code Python; la différence est que l'exec utilise des chaînes et que l'execfile utilise des fichiers. Dans Python 3, l'expression execfile a été supprimée. Si vous voulez vraiment exécuter du code Python dans un fichier (mais que vous ne voulez pas l'importer), vous pouvez le faire en ouvrant ce fichier, en lisant son contenu, puis en appelant la fonction compile (compile) globale (Python interprète force le code à être compilé, puis appelle la nouvelle fonction exec).

Nom de l'entreprise Python 2 Python 3
execfile (nom du fichier) exec ((compiler ((ouvrir ((a_filename).read ((),a_filename,exec))
  • repr (en contre-citation)

Dans Python 2, pour obtenir une représentation de chaîne d'un objet quelconque, il y a une façon d'envelopper l'objet dans des contre-citations (par exemple,xUne syntaxe particulière de la fonction répr. Cette fonction existe toujours dans Python 3, mais vous ne pouvez plus l'obtenir en utilisant des contre-indications.

Nom de l'entreprise Python 2 Python 3
Je ne sais pas. repr ((x)
`Papaya Whip + `2 ` Je vous en prie, faites-moi confiance.

1, rappelez-vous que x peut être n'importe quoi, une classe, une fonction, un module, un type de données de base, etc. ==repr== La fonction peut utiliser n'importe quel type de paramètre == Dans Python 2, les contre-citations peuvent être imbriquées, ce qui donne lieu à cette expression déroutante mais efficace. 2to3 est assez intelligent pour convertir ces appels à l'embrayage en une fonction repr.

  • Les phrases try...except sont les suivantes:

La syntaxe de la capture des anomalies a peut-être changé de Python 2 à Python 3.

Nom de l'entreprise Python 2 Python 3
essayez:
importer le mymodule
sauf ImportError, e
passe
essayez:
importer le mymodule
sauf ImportError comme e:
passe
essayez:
importer le mymodule
sauf (Erreur au moment de l'exécution, Erreur à l'importation), e
passe
essayez:
importer le mymodule
sauf (Erreur de temps d'exécution, Erreur d'importation) comme e:
passe
essayez:
importez le mymodule
sauf ImportError:
passez
Pas de changement
essayez:
importez le mymodule
sauf:
passez
Pas de changement

1, par rapport à Python 2 qui ajoute des virgules après les types d'exception, Python 3 utilise un nouveau mot-clé, as. Le mot-clé as peut également être utilisé pour capturer plusieurs types d'anomalies à la fois. Si vous capturez une exception, mais n'êtes pas intéressé par l'accès à l'objet d'exception lui-même, la syntaxe de Python 2 et Python 3 est la même. De même, si vous utilisez une méthode d'assurance (fallback) pour capturer toutes les exceptions, la syntaxe de Python 2 et Python 3 est la même. 5) Vous ne devriez absolument pas utiliser cette méthode lors de l'importation de modules (ou dans la plupart des autres cas), sinon le programme pourrait capturer des exceptions telles que KeyboardInterrupt (si l'utilisateur appuie sur Ctrl-C pour interrompre le programme), ce qui rendrait le débogage plus difficile.

  • Raise est une phrase

Dans Python 3, la syntaxe des exceptions personnalisées est modifiée avec des modifications mineures.

Nom de l'entreprise Python 2 Python 3
Montez mon Exception non modifié
montez MonException, message d'erreur Monter monException (message d'erreur)
Montez MyException,message d'erreur, a_traceback Montez monException (message d'erreur).avec_traceback (traceback)
augmenter message d'erreur non supporté

Dans sa forme la plus simple, la syntaxe n'est pas modifiée. Les modifications sont évidentes lorsque vous souhaitez supprimer une exception avec un message d'erreur personnalisé par l'utilisateur. Python 2 sépare les types d'erreur et les messages d'erreur par un comma; Python 3 transmet les messages d'erreur aux types d'erreur en tant que paramètres. Python 2 prend en charge une syntaxe plus complexe pour lancer une exception avec une trace de pile personnalisée par l'utilisateur. Vous pouvez faire la même chose avec Python 3, mais la syntaxe est complètement différente. Dans Python 2, vous pouvez jeter une exception sans classe d'exception, avec seulement un message d'exception. Dans Python 3, cette forme n'est plus prise en charge. 2to3 vous avertira qu'il ne peut pas corriger cette syntaxe automatiquement.

  • La méthode de lancement du générateur

Dans Python 2, le générateur dispose d'une méthode throw (), qui lance une exception lorsque le générateur est suspendu, puis renvoie la valeur suivante obtenue par la fonction générateur. Dans Python 3, cette fonction est toujours disponible, mais avec une différence de syntaxe.

Nom de l'entreprise Python 2 Python 3
A_générateur.throw ((MyException) Pas de changement
a_generator.throw ((MyException,message d'erreur) a_generator.throw(MyException(message d'erreur))
a_generator.throw (message d'erreur) non supporté

Dans sa forme la plus simple, le générateur lance des exceptions qui n'ont pas d'erreur personnalisée par l'utilisateur. Dans ce cas, il n'y a pas de changement de syntaxe entre Python 2 et Python 3. Si le générateur lance une exception avec un message d'erreur personnalisé par l'utilisateur, vous devez transmettre la chaîne d'erreur à la classe d'erreur pour l'instantialiser. Python 2 prend également en charge le lancement d'exceptions pour des messages d'exception uniquement. Python 3 ne prend pas en charge cette syntaxe et 2to3 affiche un message d'avertissement vous indiquant que vous devez réparer manuellement ce code.

  • Fonction globale xrange

Dans Python 2, il existe deux façons d'obtenir des nombres dans une certaine plage: range (), qui renvoie une liste, et range (), qui renvoie un iterateur. Dans Python 3, range (), qui renvoie un iterateur, xrange (), qui n'existe plus.

Nom de l'entreprise Python 2 Python 3
xrange ((10) une plage ((10)
a_list = plage ()) 10) a_list = liste (range)
[i pour une plage de données (i) 10) ] [i pour la plage initiale ((10) ]
pour i dans la plage ((10)): Pas de changement
Résultats de l'enquête Pas de changement

Dans le cas le plus simple, 2to3 convertit simplement xrange (x) en range (x). 2, si votre code Python 2 utilise range ((), 2to3 ne sait pas si vous avez besoin d'une liste ou si un iterateur fonctionne également. Par prudence, 2to3 peut envoyer une erreur, puis utiliser list (() pour forcer la conversion de la valeur de retour de range (() en type de liste. 3) Si une fonction xrange () est présente dans la liste de résolution, il n'est pas nécessaire de convertir sa valeur de retour en une liste, car la résolution de la liste est tout aussi efficace pour l'irradiateur. 4, de la même manière, le for loop fonctionne aussi sur l'intermédiaire, donc rien n'est changé ici. 5, la fonction sum () peut fonctionner sur l'irradiateur, donc 2to3 n'est pas modifié ici. Tout comme la méthode de type dictionnaire qui retourne la valeur comme vue () au lieu d'être une liste, cela s'applique également pour min (), max (), sum (), list (), tuple (), set (), sorted (), any (), all (), etc.

  • Les fonctions globales raw_input (()) et input (())

Python 2 a deux fonctions globales qui sont utilisées pour demander des entrées à l'utilisateur sur la ligne de commande. La première est appelée input (), qui attend que l'utilisateur entre une expression Python (et retourne le résultat). La seconde est appelée raw_input (), qui renvoie ce que l'utilisateur entre.

Nom de l'entreprise Python 2 Python 3
Il y a un problème. les données de saisie
Il y a un problème avec le code source. Les données sont fournies par l'intermédiaire de l'intermédiaire de l'intermédiaire.
les données de saisie Évaluation des données

Dans sa forme la plus simple, raw_input (() est remplacé par input (()). Dans Python 2, la fonction raw_input () peut spécifier un pointeur comme paramètre. Si vous voulez vraiment demander à l'utilisateur d'entrer une expression Python, vous pouvez calculer le résultat en appelant la fonction input (), puis en transmettant la valeur de retour à eval ().

  • Propriété de fonction func_*

Dans Python 2, le code d'une fonction peut accéder aux propriétés particulières de la fonction elle-même. Dans Python 3, ces propriétés particulières ont été renommées pour des raisons de cohérence.

Nom de l'entreprise Python 2 Python 3
a_function.func_name Nom de la fonction Une fonction.Nom
a_function.func_doc Une fonction.Je ne sais pas.
a_function.func_defaults est une fonction Une fonction.Les défauts
a_function.func_dict Une fonction.- Je vous en prie.
a_function.func_closure Une fonction.Fermeture
a_function.func_globals est une fonction Une fonction.- Je ne sais pas.
a_function.func_code est le code Une fonction.Le code

1, l'attribut __name__ (original func_name) contient le nom de la fonction. L'attribut __doc__ (original funcdoc) contient une chaîne de documents (docstring) que vous avez définie dans le code source de la fonction. 3,__defaults__ est un ensemble d'éléments qui conserve les valeurs par défaut des paramètres. L'attribut __dict__ (original func_dict) est un espace de noms qui prend en charge les attributs de fonctions aléatoires. L'attribut __closure__ est un ensemble d'objets de cellule qui contient les liaisons des fonctions à des variables libres. L'attribut __globals__ est une référence à l'espace de noms global du module dans lequel la fonction elle-même est définie. L'attribut __code__ est un objet de code qui représente un corps de fonctions compilé.

  • Méthode d'entrée/sortie xreadlines

Dans Python 2, les objets de fichiers ont une méthode xreadlines (), qui renvoie un iterateur, une ligne de lecture de fichier à la fois. Ceci est particulièrement utile dans le for loop. En fait, les versions ultérieures de Python 2 ont ajouté cette fonctionnalité aux objets de fichiers eux-mêmes.

Dans Python 3, les méthodes xreadlines (() ne sont plus disponibles. 2to3 peut résoudre des situations simples, mais certains cas d'extrémité nécessitent une intervention manuelle.

Nom de l'entreprise Python 2 Python 3
pour la ligne dans a_file.xreadlines(): pour la ligne dans un fichier:
pour la ligne dans a_file.xreadlines(5): Aucun changement (défait)

1, si vous appelez xreadlines sans paramètres précédemment, 2to3 le convertira en objet du fichier lui-même. Dans Python 3, ce code peut faire la même chose: lire une ligne du fichier une fois, puis exécuter le for loop. 2, si vous avez déjà utilisé un paramètre (nombre de lignes lues) pour appeler les xreadlines (), 2to3 ne peut pas effectuer la conversion de Python 2 à Python 3 pour vous, votre code échoue comme suit: AttributeError: _io.TextIOWrapper object has no attribute xreadlines. Vous pouvez manuellement changer les xreadlines en xreadlines () pour que le code fonctionne en Python 3.

  • Fonction lambda utilisant des éléments plutôt que plusieurs paramètres

Dans Python 2, vous pouvez définir une fonction lambda anonyme, qui est en fait capable de recevoir plusieurs paramètres en spécifiant le nombre d'éléments d'un groupe de composants comme paramètres. En fait, l'interpréteur de Python 2 décode ce groupe de composants en unpack en arguments nommés, puis vous pouvez les citer dans la fonction lambda par leur nom.

Nom de l'entreprise Python 2 Python 3
LAMBDA (x,): x+ f (x) L'expérience de l'expérience est basée sur les données fournies par les autorités compétentes.
LAMBDA (x, y): x+f (y) lambda x_y: x_y[0]+f(x_y[1])
lambda (x,(y,z)): x+ y+ z lambda x_y_z: x_y_z[0]+x_y_z[1][0]+ x_y_z[1][1]
lambda x, y, z: x+y + z non modifié

Si vous avez déjà défini une fonction lambda, elle utilise un élément contenant un élément comme paramètre. Dans Python 3, elle est convertie en une fonction lambda contenant une référence à x1[0]; x1 est un script 2 à 3 généré automatiquement en fonction des paramètres de nommage dans l'élément original. La fonction lambda est convertie en x_y en utilisant comme paramètre un ensemble de deux éléments (x, y) qui possède deux paramètres de position, x_y[0] et x_y[1]; Les scripts 3 et 2 à 3 peuvent même traiter les composants utilisant les paramètres de nommage de la chaîne comme paramètres de la fonction lambda. Le code résultant est un peu difficile à lire, mais il a le même effet sur Python 3 que le code d'origine sur Python 2. Vous pouvez définir une fonction lambda qui utilise plusieurs paramètres. Si aucune parenthèse n'est entourée d'un paramètre, Python 2 le traite comme une fonction lambda contenant plusieurs paramètres; dans ce corps de fonction lambda, vous référenciez ces paramètres par leur nom, comme vous le faites dans d'autres types de fonctions.

  • Caractéristiques des méthodes particulières

Dans Python 2, les méthodes de classe peuvent accéder à l'objet de classe qui définit leur classe, mais aussi à l'objet de méthode lui-même. Im_self est l'objet d'exemple de la classe; im_func est l'objet de fonction, im_class est la classe elle-même. Dans Python 3, ces attributs sont renommés pour suivre les conventions de nommage des autres attributs.

Nom de l'entreprise Python 2 Python 3
Le système de classement est un système de classement. Une instance de classe. une méthode de classe.fonction_
Une classeInstance.aClassMethod.im_self Une instance de classe. une méthode de classe.Je me suis
Le système de classement de la classe Une instance de classe. une méthode de classe.Je me suis._classe_
  • __nonzero__ méthode spéciale

Dans Python 2, vous pouvez créer vos propres classes et les rendre utilisables dans un contexte boolean. Par exemple, vous pouvez instantier cette classe et utiliser cet objet instantiel dans une if-statement.non-zéroCette méthode est appelée lorsque l'objet de l'exemple est dans le contexte de Boole. Dans Python 3, vous pouvez toujours effectuer la même fonction, mais le nom de cette méthode particulière a été changé.Je ne sais pas.()。

Nom de l'entreprise Python 2 Python 3
classe A:non-zéro(même):
passe
classe A:Je ne sais pas.(même):
passe
classe A:non-zéro(même, x, y): passe Pas de changement

1, lorsque vous utilisez un objet de classe dans le contexte de Bur, Python 3 appelle_Je ne sais pas.(), et non pasnon-zéroJe ne sais pas. Mais si vous avez une définition qui utilise deux paramètresnon-zéroLes scripts 2to3 supposent que la méthode que vous définissez a une autre utilité et ne modifie donc pas le code.

  • Types d'octaves

Entre Python 2 et Python 3, la syntaxe définissant le nombre octal est légèrement modifiée.

Nom de l'entreprise Python 2 Python 3
x = 0755 x = 0o755
  • sys.maxint

La constante sys.maxint n'est plus exacte à cause de l'intégration des longueurs entières et entières. Mais comme cette valeur est utile pour la capacité de détecter des plates-formes spécifiques, elle est conservée par Python 3 et renommée sys.maxsize.

Nom de l'entreprise Python 2 Python 3
depuis sys importmaxint depuis sys importmaxsize
a_function ((sys.maxint) est une fonction a_function ((sys.maxsize) est une fonction

1, maxint est devenu maxsize. 2, tous les sys.maxint sont devenus sys.maxsize.

  • Fonction mondiale callable

Dans Python 2, vous pouvez utiliser la fonction globale callable (*) pour vérifier si un objet peut être appelé (callable, par exemple, une fonction). Dans Python 3, cette fonction globale est annulée.Appelez!Il y a un problème avec le fait que les gens ne soient pas d'accord.

Nom de l'entreprise Python 2 Python 3
On peut appeler n'importe quoi. Il n'y a rien à faire.Appelez!’)
  • Fonction globale ((zip)

Dans Python 2, la fonction globale zip ((() peut utiliser n'importe quel nombre de séquences comme paramètres, elle renvoie une liste composée de composants. La première composition contient le premier élément de chaque séquence; la deuxième composition contient le deuxième élément de chaque séquence; elle est ensuite repoussée.

Nom de l'entreprise Python 2 Python 3
zip ((a, b, c) liste (a, b, c)
d.join ((zip ((a, b, c)) Pas de changement

Dans sa forme la plus simple, vous pouvez rétablir la fonction précédente de la fonction zip en appelant la valeur de retour de la fonction list (()) enveloppant zip (()) et la fonction list (()) traverse l'irradiateur où la fonction zip (()) est retournée, puis renvoie la liste des résultats indiqués. Dans un environnement contextuel où tous les éléments de la séquence sont déjà parcourus (par exemple, l'appel de la méthode join ici), l'irrateur qui retourne zip fonctionne correctement. Les scripts 2to3 détectent ces situations et ne modifient pas votre code.

  • Erreur standard

Dans Python 2, StandardError est la base de toutes les autres classes d'anomalies intégrées à l'exception de StopIteration, GeneratorExit, KeyboardInterrupt et SystemExit. Dans Python 3, StandardError a été supprimé; il est remplacé par Exception.

Nom de l'entreprise Python 2 Python 3
x =Erreur standard() x = Exception
x =Erreur standard ((a, b, c) x = Exception ((a, b, c)
  • les constantes dans le module types

Dans le module types, il existe une variété de constantes qui vous aident à déterminer le type d'un objet. Dans Python 2, il contient des constantes qui représentent tous les types de données de base, tels que dict et int. Dans Python 3, ces constantes ont été supprimées.

Nom de l'entreprise Python 2 Python 3
types.UnicodeType str
types.StringType Les octets
types.DictType Le dictateur
types.IntType int
types.LongType int
types.ListType liste
types.NoneType type ((Aucun)
types.BooleanType Boole
types.BufferType vue de mémoire
types.ClassType type
types.ComplexType complexe
types.EllipsisType type ((Ellipse)
types.FloatType flottant
types.ObjectType objet
types.NotImplementedType type ((Non mis en œuvre)
types.SliceType tranche
types.TupleType tuple
types.TypeType type
types.XRangeType gamme

types.StringType est mappé en octets, et non pas en str, parce que les chaînes de strings dans Python 2 sont en fait des séquences de bytes encodées par un certain type de caractère.

  • Fonction globale à l'instance

la fonction isinstance (//) vérifie si un objet est une instance d'une certaine classe (//) ou d'un type (//). Dans Python 2, vous pouvez passer à l'instance (//) un élément composé de types (//), et si l'objet est n'importe quel type de l'ensemble, la fonction retourne True (//). Dans Python 3, vous pouvez toujours le faire, mais il n'est pas recommandé de passer deux fois un type comme paramètre (//).

Nom de l'entreprise Python 2 Python 3
est l'instance ((x, ((int,float,int)) est instance ((x, ((int,float))
  • type de données basestring

Python 2 possède deux types de chaînes: les chaînes encodées en Unicode et les chaînes non encodées en Unicode. Mais il existe un autre type, basestring. Il s'agit d'un type de données abstrait, une superclasse de types str et unicode. Il ne peut pas être directement appelé ou instancié, mais vous pouvez l'utiliser comme un paramètre d'instance pour détecter si un objet est une chaîne Unicode ou une chaîne non Unicode.

Nom de l'entreprise Python 2 Python 3
est instance ((x, base de chaîne) estinstance ((x, str)
  • Module itertools

Python 2.3 introduit le module itertools, qui définit les variantes (variantes) des fonctions globales zip, map et filter, dont le type de retour est l'irradiateur plutôt que la liste. Dans Python 3, ces variantes ont été supprimées car le type de retour de ces fonctions globales est l'irradiateur.

Nom de l'entreprise Python 2 Python 3
Il est possible de modifier le code de l'appareil zip ((a, b)
Il s'agit d'un outil d'analyse. carte (a, b)
Il est possible de modifier le code de l'appareil Filtre (a, b)
depuis itertools importez imap, izip, foo Je suis en train d'importer du foo.

1, utilisez la fonction zip ((() globale au lieu d'itertools.izip ((()). 2、 Utilisez map (en anglais) plutôt que itertools.imap (en anglais). 3,itertools.ifilter ((() est devenu un filtre ((()). 4, le module itertools existe toujours dans Python 3, il ne contient que des fonctions qui ont été déplacées dans l'espace de noms global. Les scripts 2to3 sont assez intelligents pour supprimer les phrases d'importation qui ne sont plus utiles tout en conservant l'intégrité des autres phrases d'importation.

  • Sys.exc_type, sys.exc_value, sys.exc_traceback, etc. Il est également possible d'utiliser les données fournies par le système d'exploitation.

Pour traiter les exceptions, il y a trois variables auxquelles vous pouvez accéder dans le module sys: sys.exc_type, sys.exc_value, sys.exc_traceback. En fait, elles existaient à l'époque de Python 1.

Nom de l'entreprise Python 2 Python 3
sys.exc_type sys.exc_info (())[0]
sys.exc_value sys.exc_info (()) [1]
sys.exc_traceback est le nom de la base de données sys.exc_info (() [2]
  • Analyse de la liste des éléments

Dans Python 2, si vous avez besoin d'écrire une analyse de liste traversant un élément, vous n'avez pas besoin d'ajouter de parenthèses autour des valeurs du élément.

Nom de l'entreprise Python 2 Python 3
[i pour 1,2] [i pour iin(1,2)]
  • fonction os.getcwdu

Python 2 possède une fonction appelée os.getcwd (), qui renvoie le répertoire de travail actuel sous forme d'une chaîne de caractères non encodée en Unicode. Puisque les systèmes de fichiers modernes sont capables de traiter les noms de répertoire encodés en caractères, Python 2.3 introduit la fonction os.getcwdu (), qui renvoie le répertoire de travail actuel sous forme de chaîne encodée en Unicode.

Nom de l'entreprise Python 2 Python 3
Je suis désolé. Je ne sais pas.
  • Metaclasses

Dans Python 2, vous pouvez créer une classe en définissant les paramètres de la méta-classe dans la déclaration de la classe, ou en définissant une propriété spéciale de niveau de classe. Dans Python 3, l'attribut __metaclass__ a été supprimé.

Nom de l'entreprise Python 2 Python 3
classe C ((metaclass=PapayaMeta):
passe
non modifié
classe Whip:
_Je ne sais pas.= PapayeMeta
classe Whip (méta-classe):
Classe C (Bateur de coups de fouet):Je ne sais pas.= PapayeMeta Classe C ((Whipper,Beater,metaclass=PapayaMeta):
passe

1, déclarer les paramètres de la méta-classe lors de la déclaration de la classe, ce qui est valable dans Python 2 et Python 3, ils sont les mêmes. 2, dans la définition de la classe, déclarer que l'attribut __metaclass__ est valide en Python 2, mais qu'il n'est plus valide en Python 3. 3, 2to3 permet de construire une déclaration de classe valide, même si cette classe hérite de plusieurs classes mères.

  • À propos du style de code

Les correctifs énumérés ci-dessous ne sont pas vraiment des correctifs; c'est-à-dire qu'ils ne concernent que le style du code et n'ont rien à voir avec la nature du code. Mais les développeurs de Python sont très intéressés à rendre le style du code aussi homogène que possible. Pour cela, il existe un manuel officiel dédié qui décrit le style du code Python.

  • set (en anglais) littérale (en anglais)

Dans Python 2, la seule façon de définir un ensemble de valeurs littérales est d'appeler set a_sequence. Dans Python 3, cela reste valable, mais l'utilisation d'une nouvelle notation littérale: parenthèses majuscules est une méthode plus claire. Cette méthode fonctionne en dehors des ensembles vides, car le dictionnaire utilise également des parenthèses majuscules, de sorte que {} indique un dictionnaire vide, et non un ensemble vide.

Les scripts 2to3 ne réparent pas par défaut les valeurs set() littérales. Pour activer cette fonction, spécifiez le paramètre -f set_literal lors de l'appel à la ligne de commande 2to3.

Nom de l'entreprise Avant Après
ensemble (([1,2,3]) {1,2,3}
Série (série 1, 2, 3) {1,2,3}
ensemble (([i pour iin a_sequence]) {i pour l'intérieur d'une_ séquence}
  • Le buffer de fonction globale est explicite.

Les objets Python implémentés en C peuvent exporter une interface tampon qui permet à d'autres codes Python de lire et d'écrire directement sur un bloc de mémoire.

Les scripts 2to3 ne réparent pas la fonction buffer par défaut. Pour activer cette fonction, spécifiez le paramètre -f buffer lors de l'appel à la ligne de commande 2to3.

Nom de l'entreprise Avant Après
x = tampon (y) x = vue de mémoire (y)
  • Les espaces autour des virgules sont évidents.

Bien que Python ait des exigences très strictes en matière d'espaces pour l'indentation et l'outdenting, il est libre d'utiliser les espaces dans d'autres aspects de Python. Dans les listes, les composants, les ensembles et les dictionnaires, les espaces peuvent apparaître devant ou derrière les virgules, ce qui n'a pas de mauvais effet. Cependant, le manuel de style de code Python indique qu'il ne peut pas y avoir d'espace avant les virgules et qu'il devrait y avoir un espace après les virgules.

Le script 2to3 ne répare pas les espaces autour des virgules par défaut. Pour activer cette fonction, spécifiez l'argument -f wscomma lors de l'appel à la ligne de commande 2to3.

Nom de l'entreprise Avant Après
a, b a, b
- Je ne sais pas. {a: b}
  • Les idiomes communs sont évidents.

Beaucoup de conventions ont été établies dans la communauté Python. Certaines sont comme while 1: loop, qui remonte à Python 1.

Les scripts 2to3 ne corrigent pas ces conventions par défaut. Pour activer cette fonction, spécifiez le paramètre -f idioms lors de l'appel à la ligne de commande 2to3.

Nom de l'entreprise Avant Après
alors que 1:
do_stuff()
alors que True:
do_stuff()
type ((x) == T estinstance ((x, T)
type ((x) est T estinstance ((x, T)
a_liste = liste ((a_séquence) a_list = trié ((a_sequence)
a_list.sort ()) Je ne peux pas faire ça.
Je ne peux pas faire ça.

Traduit deLe blogue du CSDN

Comment convertir du code Python 2 en code Python 3

Il s'agit d'un article sur la façon de convertir du code Python 2.x en code Python 3.x. Comment convertir du code Python 2.x en code Python 3.x

  • 1.自己手动转换

Ce n'est pas nécessaire de dire grand-chose si cela ne concerne que quelques fonctions, comme print, etc.

Vous pouvez modifier le code vous-même.

  • 2.利用Python内置(Python脚本)工具,帮你自动转换

La version 2.x de Python, comme Python 2.7.2 que j'ai installé, est livrée avec des outils utiles après le téléchargement et l'installation de Windows.

其中一个叫做2to3.pyLe code de Python 2.x est converti en code de Python 3.x.

Il est situé dans le répertoire racine des installations Python\Python27\Tools\Scripts\2to3.py

如何利用2to3.py, implémenter le code de Python 2.x et le transformer en code de Python 3.x Par exemple, j'ai un scénario Python pour Python 2.x:

D:\tmp\tmp_dev_root\python\python2_to_python3\34563264_données de_site.py

Maintenant, nous voulons le convertir en code Python 3.x.

Il est possible d'ouvrir le cmd de windows, de le localiser sous le script à convertir et de l'exécuter.

D:\tmp\WordPress\DevRoot\Python27\Outils\Scripts\2to3.py -w 34563264_données_du_site.py

Si la conversion est réussie, l'exécution correspondante est:

D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored 34563264_data_from_site.py
--- 34563264_data_from_site.py  (original)
+++ 34563264_data_from_site.py  (refactored)
@@ -18,7 +18,7 @@
 import time;
 import codecs;
 import logging;
-import urllib;
+import urllib.request, urllib.parse, urllib.error;
 from datetime import datetime,timedelta;
 from optparse import OptionParser;
 from string import Template,replace;
@@ -90,7 +90,7 @@
         foundPhone = eachItemSoup.find(attrs={"class":"phone"});
         logging.debug("foundPhone=%s", foundPhone);
         if(foundPhone):
-            foundPhoneUni = unicode(foundPhone);
+            foundPhoneUni = str(foundPhone);
             logging.debug("foundPhoneUni=%s", foundPhoneUni);
             # case 1:
             #<p class="phone"><strong>phone:</strong>&nbsp;800.206.7886<br />
@@ -122,7 +122,7 @@
         foundWeb = eachItemSoup.find(attrs={"class":"web"});
         logging.debug("foundWeb=%s", foundWeb);
         if(foundWeb):
-            foundWebUni = unicode(foundWeb);
+            foundWebUni = str(foundWeb);
             logging.debug("foundWebUni=%s", foundWebUni);
 
             # <p class="web"><strong>e-mail:</strong>&nbsp;<a href="#">sales@cinesysinc.com</a><br />
@@ -151,7 +151,7 @@
         foundAddr = eachItemSoup.find(attrs={"class":"addr"});
         logging.debug("foundAddr=%s", foundAddr);
         if(foundAddr):
-            foundAddrUni = unicode(foundAddr);
+            foundAddrUni = str(foundAddr);
 
             # <p class="addr">
                 # <strong>address:</strong>&nbsp;740 SW 21st Ave, Suite #310<br />
RefactoringTool: Files that were modified:
RefactoringTool: 34563264_data_from_site.py

À ce stade, vous pouvez voir l'original 3456264_data_from_site.py, qui est devenu une version de Python 3.x.


Plus de

FangBei est là.Python 2 est utilisé par botvs?

Le petit rêveLe serveur de retouche de BotVS utilise la version 2.7 de Python, qui est prise en charge pour les plates-formes BotVS Python 2 et Python 3.