Mudanças entre Python 2.x.x e Python 3.x.x e como converter Python 2.x.x para Python 3.x.x

Criado em: 2016-10-09 12:36:49, atualizado em: 2017-10-11 10:18:05
comments   2
hits   4963

aspectos. Em listas, módulos, conjuntos e dicionários, os espaços podem aparecer na frente ou atrás de vírgulas, o que não tem nenhum efeito negativo. No entanto, o manual de estilo de código do Python indica que as vírgulas não podem ser precedidas por espaços e que os vírgulas devem ser seguidas por um espaço.

Os scripts 2to3 não corrigem os espaços em torno das vírgulas por defeito. Para ativar esse recurso, especifique o parâmetro -f wscomma quando a linha de comando é chamada 2to3.

Notes Before After
a ,b a, b
{a :b} {a: b}
  • #### Idiomas comuns

Muitas práticas foram criadas na comunidade Python. Existem algumas como a while 1: loop, que remonta a Python 1. A Python não tinha um tipo de booleano em sentido real até o Python 2.3, então os desenvolvedores usavam alternativas de 1 e 0. Os programadores Python contemporâneos devem treinar seus cérebros para usar as versões modernas dessas práticas.

Os scripts 2to3 não fazem correções para essas práticas por padrão. Para ativar essa função, especifique o parâmetro -f idioms quando a linha de comando é chamada 2to3.

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)

Traduzido de:Blog da CSDN

Como converter o código do Python 2 para o código do Python 3

Como converter o código do Python 2.x para o código do Python 3.x Métodos para converter código do Python 2.x para código do Python 3.x

  • #### 1. Faça a sua própria conversão manual

Isso não é muito para dizer, se apenas envolver poucas funções, como print e assim por diante.

Então você pode mudar o código.

  • #### 2. Utilize a ferramenta Python built-in (Python scripts) para fazer a conversão automática

As versões 2.x do Python, como o Python 2.7.2 que eu instalei, trazem algumas ferramentas úteis para o download e instalação no Windows.

Uma delas, chamada 2to3.py, é para ajudar você a implementar e converter o código do Python 2.x para o código do Python 3.x.

A sua localização é: Directório raiz de instalação do Python\Python27\Tools\Scripts\2to3.py

Como usar o 2to3.py para converter o código do Python 2.x para o Python 3.x Por exemplo, eu tenho um script em Python 2.x:

D:\tmp\tmp_dev_root\python\python2_to_python3\34563264_data_from_site.py

Agora, o código que quer transformá-lo em Python 3.x.

Pode ser executado abrindo o cmd do Windows, localizando-se sob o script a ser convertido

D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py

A conversão foi bem-sucedida, com os seguintes resultados:

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

Agora, você pode ver que o original 34563264_data_from_site.py foi transformado em código Python 3.x.

Para isso, é necessário criar um arquivo bak::34563264_data_from_site.py.bak. Comparando os dois, você verá a diferença:

Mudanças entre Python 2.x.x e Python 3.x.x e como converter Python 2.x.x para Python 3.x.x

Atualmente, para o próprio 2to3.py, você também pode ver mais usos através da ajuda:

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

O blogueiro é conhecido por seu trabalho de divulgação de imagens e vídeos.

(1) Se não for adicionado o parâmetro -w, o padrão é apenas imprimir o conteúdo de diferença correspondente ao processo de conversão para a janela atual.

(2) Adicionar -w é escrever o conteúdo alterado de volta ao documento original.

(3) Se você não quiser gerar um arquivo bak, adicione -n.

(4) Não quero ver o conteúdo de uma série de saídas, mas, com os “no-diffs”, sim.

Os outros não foram apresentados muito bem. Os interessados podem continuar a pesquisar por conta própria.

O uso de 2 a 3 acima é copiado deNo caminho

A edição foi reeditada e, se houver erros, por favor, aponte! ^_^