tôt qu’un ensemble vide.
Les scripts 2to3 ne corrigent pas les valeurs littérales de set[…] par défaut. Pour activer cette fonctionnalité, spécifiez le paramètre -f set_literal lors de l’appel 2to3 sur la ligne de commande.
Notes | Before | After |
---|---|---|
set([1,2,3]) | {1,2,3} | |
set((1,2,3)) | {1,2,3} | |
set([i for iin a_sequence]) | {i for iin a_sequence} |
Les objets Python implémentés en C exportent une interface de zone tampon qui permet à d’autres codes Python de lire et d’écrire directement sur un bloc de mémoire. Cela sonne fort, mais c’est aussi effrayant. Dans Python 3, le buffer a été renommé memoryview. Les modifications réelles sont plus complexes, mais vous pouvez presque ignorer ces différences.
Les scripts 2to3 ne corrigent pas par défaut la fonction buffer (). Pour activer cette fonction, spécifiez le paramètre -f buffer lors de l’appel 2to3 sur la ligne de commande.
Notes | Before | After |
---|---|---|
x =buffer(y) | x =memoryview(y) |
Bien que Python soit très strict sur les espaces pour indenter et sortir, il est assez libre d’utiliser les espaces dans d’autres domaines. Dans les listes, les sous-ensembles, 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’espaces avant les virgules et qu’il devrait y en avoir après les virgules.
Les scripts 2to3 ne corrigent pas les espaces autour des virgules par défaut. Pour activer cette fonction, spécifiez le paramètre -f wscomma lors de l’appel 2to3 sur la ligne de commande.
Notes | Before | After |
---|---|---|
a ,b | a, b | |
{a :b} | {a: b} |
De nombreuses routines ont été établies dans la communauté Python. Certaines, comme la boucle while 1: qui remonte à Python 1. Python n’avait pas de vrais types de boules jusqu’à Python 2.3, donc les développeurs utilisaient auparavant des substituts de 1 et 0.
Par défaut, les scripts 2to3 ne corrigent pas ces routines. Pour activer cette fonctionnalité, spécifiez le paramètre -f idioms lors de l’appel 2to3 sur la ligne de commande.
Notes | Before | After |
---|---|---|
while 1: do_stuff() |
while True: do_stuff() |
|
type(x) == T | isinstance(x, T) | |
type(x) is T | isinstance(x, T) | |
a_list = list(a_sequence) | a_list = sorted(a_sequence) | |
a_list.sort() | do_stuff(a_list) | |
do_stuff(a_list) |
Il a été retrouvé mort.Le blog du CSDN
Il s’agit d’une question de conversion du code de Python 2.x vers le code de Python 3.x. Comment convertir du code Python 2.x en code Python 3.x
Il n’y a pas grand-chose à dire si cela concerne seulement quelques fonctions, comme print etc.
Si vous avez besoin d’un code, vous pouvez le modifier vous-même
Les versions 2.x de Python, comme la version 2.7.2 que j’ai installée, sont livrées avec des outils utiles après le téléchargement et l’installation sur Windows.
L’un d’eux s’appelle 2to3.py, et il est conçu pour vous aider à transformer le code de Python 2.x en celui de Python 3.x.
Il est situé dans le répertoire racine des installations de Python.
Comment utiliser 2to3.py pour réaliser la conversion du code de Python 2.x en code Python 3.x Par exemple, j’ai un script en Python 2.x:
D:\tmp\tmp_dev_root\python\python2_to_python3\34563264_data_from_site.py
Maintenant, le code pour le convertir en Python 3.x.
Vous pouvez le faire en ouvrant le cmd de windows, en le plaçant sous le script à convertir, puis en l’exécutant.
D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py
La conversion est réussie et les résultats sont:
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> 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> <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> 740 SW 21st Ave, Suite #310<br />
RefactoringTool: Files that were modified:
RefactoringTool: 34563264_data_from_site.py
À ce stade, vous pouvez voir que l’ancien 34563264_data_from_site.py est devenu le code de Python 3.x.
Il y a aussi un fichier bak::34563264_data_from_site.py.bak, comparez les deux et vous verrez la différence:
Pour 2to3.py en lui-même, vous pouvez également consulter la page d’aide pour en savoir plus:
D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -h
Usage: 2to3 [options] file|dir ...
Options:
-h, --help show this help message and exit
-d, --doctests_only Fix up doctests only
-f FIX, --fix=FIX Each FIX specifies a transformation; default: all
-j PROCESSES, --processes=PROCESSES
Run 2to3 concurrently
-x NOFIX, --nofix=NOFIX
Prevent a transformation from being run
-l, --list-fixes List available transformations
-p, --print-function Modify the grammar so that print() is a function
-v, --verbose More verbose logging
--no-diffs Don't show diffs of the refactoring
-w, --write Write back modified files
-n, --nobackups Don't write backups for modified files
Voici quelques explications à ce sujet:
(1) Si le paramètre -w n’est pas ajouté, le diff correspondant au processus de conversion est simplement imprimé dans la fenêtre actuelle.
(2) Ajouter -w, c’est réécrire le contenu modifié dans le document original.
(3) Si vous ne voulez pas générer de fichier bak, ajoutez -n.
(4) Si vous ne voulez pas voir ce qui sort, ajoutez des “no-diffs”.
Pour les autres, il n’y a pas grand-chose à dire.
La traduction de 2 à 3 ci-dessus est tirée deDans la rue
Si vous avez des erreurs, n’hésitez pas à les signaler !_^