Modificación de Python 2.x.x con Python 3.x.x & Métodos para convertir Python 2.x.x en Python 3.x.x

El autor:Un sueño pequeño., Creado: 2016-10-09 12:36:49, Actualizado: 2017-10-11 10:18:05

Diferencias, modificaciones de la sintaxis de python2 y python3

Casi todos los programas de Python 2 requieren algunas modificaciones para funcionar correctamente en el entorno de Python 3. Para simplificar este proceso de conversión, Python 3 viene con un script útil llamado 2to3 (Utility Script), que toma su archivo fuente de programa de Python 2 como entrada y luego lo convierte automáticamente a la forma de Python 3.

  • La frase de impresión

En Python 2, print es una frase. Cualquier cosa que quieras exportar, sólo tienes que ponerlas detrás de la palabra clave print. En Python 3, print ((() es una función.

Las notas Python 2 Python 3 también
Imprimir Imprimir
Impresión 1 Imprimir (1)
Impresión 1,2 Imprimir
Imprimir 1, 2, Impresión ((1,2,fin= ")
Imprimir >> sys.stderr,1,2,3 Imprimir ((1,2,3, archivo=sys.stderr)

1, para exportar una línea en blanco, se requiere una llamada de print sin parámetros ((() ⇒ 2, para exportar un valor separado, es necesario que este valor sea un parámetro de print (). 3, para la salida se utilizan dos valores separados por un espacio y se puede llamar print (() con dos parámetros. 4, este ejemplo tiene algunos trucos. En Python 2, si usas un coma (,) como el final de la sentencia de print, esto producirá un resultado separado por espacios, y luego producirá un espacio que sigue (trailing space) sin producir un regreso de carrocería. En Python 3, se puede lograr el mismo efecto al pasar end= a print como un parámetro de palabra clave. El valor predeterminado del parámetro end es \n, por lo que se puede cancelar el símbolo de regreso al final de la exportación al volver a especificar el valor del parámetro end. 5. En Python 2, puedes redirigir la salida a un tubo, como sys.stderr, usando la sintaxis de >pipe_name. En Python 3, puedes hacer lo mismo con print (), pasando el valor del tubo como la clave de un archivo de parámetros. El valor predeterminado de un archivo de parámetros es std.stdout, por lo que reinsertar su valor hará que print ()) pueda exportarse a otro tubo.

  • Cuadros de Unicode

Python 2 tiene dos tipos de strings:Cuadros de UnicodeyLas cuerdas que no son UnicodeEn Python 3 sólo hay un tipo:Las cadenas de código Unicode

Las notas Python 2 Python 3 también
¿Por qué no lo haces? Papaya Whip
¿Por qué no lo haces? ¿Por qué no lo haces?

Las cadenas de Unicode en Python 2 son cadenas normales en Python 3, ya que en Python 3 las cadenas son siempre de formato Unicode. Las líneas originales de Unicode ("raw string") ("Python no traducirá automáticamente la línea inversa" con estas líneas) también se sustituyen por líneas normales, ya que en Python 3 todas las líneas originales están codificadas en Unicode.

  • Función global unicode (en inglés)

En Python 2 hay dos funciones globales que pueden convertir objetos forzosamente a una cadena: unicode (() que convierte objetos a una cadena Unicode, y str (() que convierte objetos a una cadena no Unicode. Python 3 sólo tiene un tipo de cadena, la cadena Unicode, por lo que la función str (() puede realizar todas las funciones.La función unicode (()) ya no existe en Python 3.)

Las notas Python 2 Python 3 también
Unicode ((cualquier cosa) No hay nada.
  • long longitud integral

Python 2 tiene int y long preparados para números sin punto flotante. El valor máximo del tipo int no puede ser superior a sys.maxint, y este valor máximo es relevante para la plataforma. Se puede definir un tipo de integro longitudinal agregando una L al final del número, que obviamente es mayor que el rango numérico representado por el tipo de int. En Python 3, solo hay un tipo de integer int, que en la mayoría de los casos es muy parecido al tipo de integro longitudinal de Python 2.

Para más información, vea: PEP 237: Unificar el tipo completo y el tipo completo.

Las notas Python 2 Python 3 también
x = 1000000000000L El importe de las pérdidas se calculará en función de las pérdidas anuales.
Se aplicará el método de cálculo de las emisiones de gases de efecto invernadero. Se aplicará el método siguiente:
largo (x) Int (x)
el tipo ((x) es largo el tipo ((x) es int
esinstancia ((x,largo) esinstancia ((x,int)

En Python 2 el integer decimal se sustituye por el integer ordinario decimal en Python 3. En Python 2, el integer de 16 dígitos se sustituye por el integer ordinario de 16 dígitos en Python 3. En Python 3, ya que el formato completo ya no existe, el formato completo es el mismo.La función natural long ((() tampoco existe. Para forzar la conversión de una variable a un tipo entero, se puede usar la función int ((().¿Qué es esto? Verifica si una variable es de tipo entero, obtiene su tipo de datos y la compara con una de tipo int (no larga). También puede usar la función istance (() para verificar el tipo de datos; una vez más, enfatiza que int, en lugar de long, es el tipo de número entero.

  • Comparar el operador <>

Python 2 soporta <> como sinónimo de!=. Python 3 sólo soporta!=, ya no soporta <>.

Las notas Python 2 Python 3 también
si x <> y: si x! = y:
si x <> y<> z: Si x es igual a y es igual a z:

1, simple comparación. 2, comparación entre tres valores de complejidad relativa.

  • El método de la clase de diccionario tiene_key ((()

En Python 2, el método has_key para objetos de diccionario se usa para probar si el diccionario contiene una clave específica. Python 3 ya no admite este método.En elEl operador.

Las notas Python 2 Python 3 también
A_dictionary.has_key ((Papaya Whip) PapayaWhip en un_dicionario
a_dicionario.tiene_clave (x) o a_dicionario.tiene_clave (y) x en el diccionario o y en el diccionario
a_dictionary.has_key ((x o y) (x o y) en el diccionario
a_dictionary.has_key ((x + y) (x + y) en el diccionario
x + a_dictionary.has_key (y) x + (y en el diccionario)

1, la forma más simple. 2, el operador or tiene una prioridad menor que el operador in, por lo que no hay que añadir paréntesis aquí. Por otra parte, por la misma razón, la prioridad de or es inferior a in, por lo que se necesita añadir paréntesis. Nota: el código aquí es completamente diferente al de la línea anterior. Python primero interpreta x o y y obtiene el resultado x (si x es verdadero en el contexto de Boole) o y. El operador in tiene una prioridad inferior a la del operador +, por lo que esta forma en el código no requiere técnicamente paréntesis, pero 2to3 se agrega. 5, esta forma requiere paréntesis, ya que la prioridad de in es inferior a +.

  • Método de clase de diccionario para devolver la lista

En Python 2, muchos métodos de la clase de diccionario devuelven valores de listas. Los métodos más comunes incluyen claves, elementos y valores. En Python 3, todos los métodos devuelven valores en una vista dinámica. En algunos entornos contextuales, este cambio no tiene efecto.

Las notas Python 2 Python 3 también
a_dicionario.claves() lista ((un_dicionario.claves())
a_dicionario.items (en inglés) Lista de artículos del diccionario
a_dicionario.iterkeys() iter ((a_dictionary.keys))
[i para iin a_dictionary.iterkeys() ] [i para iin a_dictionary.keys() ]
Min (a_dicionario.claves) No hay cambio

La función 1, que utiliza la lista (((), convierte el valor de retorno de keys ((() en una lista estática, por razones de seguridad, 2to3 puede retornar errores. Este tipo de código es válido, pero es un poco menos eficiente para usar la vista. 2, que es otro punto de vista de la conversión de la manera (sobre los elementos) a la lista. La conversión de la manera 2to3 a los valores también es lo mismo. 3, en Python 3 ya no se soportan los iterkeys (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 4, 2to3 es capaz de reconocer que el método de iterkeys se utiliza en el análisis de listas y luego lo convierte en keys en Python 3. 5, 2to3 también puede reconocer que el valor de retorno del método keys (() se transmite de inmediato a otra función que recorre toda la secuencia, por lo que no es necesario convertir el valor de retorno de keys (() a una lista. Por el contrario, la función min (()) está dispuesta a recorrer la vista. Este proceso es igualmente válido para min ((), max ((), sum ((), tuple ((), setlist ((), sorted ((), any (()) y all (()).

  • Módulos que han sido renombrados o reorganizados

Desde Python 2 hasta Python 3, algunos módulos de la librería estándar han sido renombrados. Otros módulos interrelacionados también se han combinado o reorganizado para hacer que esta asociación sea más lógica.

  • ¿Qué es esto? En Python 3, varios módulos HTTP relacionados se combinan en un paquete separado, el HTTP.
Las notas Python 2 Python 3 también
Importación httplib Importar http.client
Importación de cookies Importar http.cookies
Importación de cookies Importar http.cookiejar
Importar BaseHTTPServer
importar SimpleHTTPServer
importar CGIHttpServer
Importar el servidor http.

El módulo http.client implementa una base de datos que se puede utilizar para solicitar recursos HTTP y analizar las respuestas HTTP. El módulo http.cookies proporciona una interfaz Python para obtener las cookies enviadas a través del encabezado de Set-Cookie Los navegadores más populares almacenan las cookies en forma de archivos en el disco, que pueden ser manipulados por el módulo http.cookiejar. El módulo http.server implementa un servidor HTTP básico

  • ¿Qué es esto? Python 2 tiene algunos módulos para analizar, codificar y obtener URLs, pero estos módulos se superponen entre sí como si fueran ratones. En Python 3, estos módulos se reestructuran y se combinan en un paquete independiente, urllib.
Las notas Python 2 Python 3 también
Importación de URL importar urllib.request
urllib.parse,urllib.error
Importación de urllib2 Importar urllib.request
urllib.error
Importación de URL Importar urllib.parse
Importar robotparser Importar urllib.robotparser
desde urllib import FancyURLopener
desde urllib import urlencode
desde urllib.request importar FancyURLopener
desde urllib.parse importar urlencode
desde urllib2 import Solicitud
desde urllib2 import HTTPError
desde urllib.request import Request
desde urllib.error import HTTPError

Anteriormente, el módulo urllib en Python 2 tenía una gran variedad de funciones, incluyendo urlopen para obtener datos, y también era útil para dividir una URL en sus componentes: splittype, splithost y splituser. En el nuevo paquete urllib, estas funciones están organizadas de manera más lógica. En Python 3, el módulo urllib2 anterior se incorporó al paquete urllib. Además, en urllib2 todas tus cosas favoritas aparecerán como parte integrante del módulo urllib de Python 3, como el método build_opener, objetos de solicitud, HTTPBasicAuthHandler y amigos. El módulo urllib.parse de Python 3 contiene todas las funciones de análisis del módulo urlparse original de Python 2. El módulo urllib.robotparse analiza el archivo robots.txt. La clase FancyURLopener, que maneja redirecciones HTTP y otros códigos de estado, sigue siendo válida en el módulo urllib.request de Python 3. Los objetos de solicitud siguen siendo válidos en urllib.request, pero las constantes como HTTPError se han trasladado a urllib.error. ¿He mencionado que 2to3 también reescribirá sus llamadas a funciones? Por ejemplo, si usted ha importado un módulo urllib en su código de Python 2 y ha llamado urllib.urlopen))) para obtener datos, 2to3 modificará la declaración de importación y la llamada de la función al mismo tiempo.

Las notas Python 2 Python 3 también
importar urllib imprimir urllib.urlopen ((")http://diveintopython3.org/’) leer)) Importar urllib.request, urllib.parse, urllib.error
Imprimir (en inglés)http://diveintopython3.org/’) leer))
  • Dbm Todas las clones de DBM están ahora en un paquete separado, DBM. Si necesitas una variante específica, como GNUDBM, puedes importar el módulo adecuado en el paquete de DBM.
Las notas Python 2 Python 3 también
Importar dbm Importar dbm.ndbm
Importar gdbm importacióndbm.gnu
Importar dbhash Importar dbm.bsd
Importa el Dumbdbm Importar dbm.dumb
importar cualquier
importar cualquier
Importar dbm
  • ¿Qué es esto? XML-RPC es un método ligero para ejecutar llamadas RPC remotas a través del protocolo HTTP. Algunas implementaciones de clientes XML-RPC y servidores XML-RPC ahora se combinan en un paquete independiente, xmlrpc.
Las notas Python 2 Python 3 también
Importar xmlrpclib Importar xmlrpc.client
Importar DocXMLRPCServer
importar SimpleXMLRPCServer
Importar xmlrpc.server
  • Otros módulos

Las notas Python 2 Python 3 también
Intentar:
importar cStringIO como StringIO
excepto ImportError:
importar StringIO
Importación
Intentar:
importar encurtido como encurtido
excepto ImportarError:
importar encurtido
encurtidos de importación
ImportarConstruido Construcciones de importación
Importación de copia_reg Importación de copias
Lista de espera de importación lista de espera de importación
Importar SocketServer Importar servidor de sockets
Importar ConfigParser Importar el parser de configuración
Importación Importar reprlib
comandos de importación subproceso de importación

1, en Python 2, lo que normalmente harías es intentar importar cStringIO como alternativa a StringIO primero, y si eso falla, importar StringIO de nuevo. No hagas esto en Python 3; el módulo io te ayudará a manejar esto. En Python 2, importar la implementación más rápida de pickle también es una forma útil similar a la anterior. En Python 3, los módulos de pickle se procesan automáticamente para usted, así que no vuelva a hacerlo. El módulo builtins contiene funciones globales, clases y constantes que se usan en todo el lenguaje Python. Una función redefinida en el módulo builtins significa que esta función global se ha redefinido en todas partes. El módulo copyreg agrega soporte para el módulo pickle para tipos personalizados de usuario definidos en C. El módulo de cola 5 realiza una cola de productores a consumidores (multi-producer, multi-consumer queue). 6. El módulo socketserver proporciona una clase básica general para la implementación de una variedad de servidores de sockets. 7. El módulo de parser de configuración se utiliza para analizar los perfiles de estilo INI. El módulo reprlib reimplementa la función repr () y agrega control sobre la longitud de la expresión de la cadena antes de ser cortada. Los módulos de subprocesos permiten crear subprocesos, conectarse a sus canales y obtener sus valores de retorno.

  • Importación relativa dentro del paquete

Un paquete es una entidad única compuesta por un conjunto de módulos asociados. En Python 2, para hacer referencia entre sí a los módulos dentro del mismo paquete, se utiliza import foo o from foo import Bar.2解释器会先在当前目录里搜索foo.pyEn Python 3, el proceso es un poco diferente. Python 3 no busca primero en el camino actual, sino que lo hace directamente en el camino de búsqueda de Python. Si quieres importar un módulo del paquete a otro módulo del paquete, necesitas proporcionar explícitamente el camino relativo de los dos módulos.

Supongamos que tienes el siguiente paquete, varios archivos en el mismo directorio:

- ¿Cuál es el problema? ¿Qué es eso? - ¿Qué quieres decir?Iniciar.py ¿Qué es eso?+--constantes.py | +--mbcharsetprober.py | +--detector universal.py

Ahora supongamos que universaldector.py requiere importar todas las constantes.py.,另外还需要导入mbcharsetprober.py的一个类。你会怎样做?

Las notas Python 2 Python 3 también
Constantes de importación de las constantes.import
desde mbcharsetprober importar MultiByteCharSetProber desde.mbcharsetprober importar MultiByteCharsetProber

1, cuando necesites importar todo el módulo desde otra parte del paquete, usa la nueva sintaxis de.import de.from.universaldetector.py¿Quieres importar un archivo?constants.pyEn este ejemplo, los dos archivos están en el mismo directorio, por lo que se utiliza un solo final. También puede importar desde el directorio padre ((from... import anothermodule) o desde el subdirectorio. 2. Para importar una clase o función específica directamente desde otros módulos a tu módulo en el espacio de nombres, añade el camino relativo al principio del módulo que se quiere importar y elimina la última barra (slash). En este ejemplo, mbcharsetprober.py y universaldetector.py están en el mismo directorio, por lo que el nombre del camino relativo es una frase. También puedes importar desde el directorio padre (from... import anothermodule) o desde el directorio subdirectorio.

  • El método del iterador es el siguiente ((()

En Python 2, el iterador tiene un método next (), que se utiliza para devolver el siguiente elemento de la secuencia. En Python 3 funciona igual, pero ahora hay una nueva función global next (), que usa un iterador como parámetro.

Las notas Python 2 Python 3 también
AnIterator.next (() Siguiente (Aniterador)
a_function_that_returns_an_iterator().siguiente() siguiente ((una_función_que_devuelve_un_iterador())
clase A:
def next ((self):
aprueba
clase A:
El siguiente.(sólo):
pasar por el
clase A:
def next ((self, x, y):
pasar
No hay cambio
next = 42
para un_iterador en una_secuencia_de_iteradores:
an_iterator.next()
siguiente = 42
para un_iterador en una_secuencia_de_iteradores:
un_iterador._El siguiente.()

El ejemplo más simple es que ya no llamas el método de next ((() de un iterador, y ahora pasas el propio iterador como parámetro a la función global next ((()). 2, si tienes una función de valor de retorno que es una función del iterador, llama esta función y pasa el resultado como parámetro a la función next (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( 3. si usted asume su propia clase y luego la usa como un iterador, en Python 3 usted puede definir un método especialEl siguiente.(¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ 4, si la clase que defines tiene un next ((), que usa uno o más parámetros, 2to3 no lo moverá cuando se ejecute. Esta clase no puede ser utilizada como un iterador, ya que su método next (() tiene parámetros. 5, este es un poco complicado. Si por casualidad tienes una variable local llamada next, en Python 3 tendrá mayor prioridad que la función global next ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((El siguiente.También puedes reestructurar el código para que esta variable local no tenga el nombre de next, pero 2to3 no lo hará por ti.

  • Filter de funciones globales

En Python 2, el método filtrar regresa una lista, que se detecta a través de una función que devuelve un valor de True o False para cada elemento de la secuencia. En Python 3, la función filtrar regresa un iterador y ya no es una lista.

Las notas Python 2 Python 3 también
Filtro (a_función, a_secuencia) lista ((filtro ((una_función, una_secuencia))
lista ((filtro ((una_función, una_secuencia)) No hay cambio
Filtro ((Ninguno, a_secuencia) [i para iin a_secuencia si i]
para i en filtro ((Ninguno, a_secuencia): No hay cambio
[i para el filtro (a_función, a_secuencia) ] No hay cambio

En el caso más sencillo, 2to3 envuelve el filtro con una función list (), y la función list () recorre sus parámetros y devuelve una lista. 2, sin embargo, si la llamada filter ((() ya ha sido envuelta por list ((), 2to3 no procesará más, ya que en este caso no importa si el valor devuelto por filter (()) es un iterador. Para procesar una sintaxis especial como filter (None,...) 2to3 convierte esta llamada de forma equivalente en una lista de análisis. 4. No es necesario hacer más modificaciones, ya que el ciclo for recorre toda la secuencia. 5, igual que arriba, no hay necesidad de hacer cambios, ya que la lista se analiza a través de toda la secuencia, incluso si el filtro regresa a un iterador, todavía puede funcionar como si el filtro anterior regresara a la lista.

  • Función global map (en inglés)

Al igual que el cambio de filter (), la función map (), ahora devuelve un iterador (..) en Python 2.

Las notas Python 2 Python 3 también
mapa (una_función, PapayaWhip) lista ((mapa ((una_función, PapayaWhip))
Mapa ((Ninguno, Papaya Whip) lista (( PapayaWhip)
Mapa ((lambda x: x+1,rango ((42)) [x+1 para x en el rango ((42) ]
para i en el mapa ((a_función, a_secuencia): No hay cambio
[i para una función, una secuencia] No hay cambio

1, similar al tratamiento del filtro (), en el caso más simple, 2to3 utiliza una función list (), para envasar la llamada map (). 2、 para la sintaxis de un mapa especial ((None,...) similar a un filtro ((None,...) 2to3 lo convierte en una llamada equivalente a una lista de usos ((( 3, si el primer parámetro de map ((() es una función lambda, 2to3 lo convierte en un parámetro de lista equivalente. 4, no hay necesidad de hacer cambios para los lazos for que recorren toda la secuencia. 5, una vez más, no es necesario hacer modificaciones aquí, ya que la lista se analiza a través de toda la secuencia, aunque el valor de retorno de map ((() sea un iterador y no una lista, funcionará correctamente.

  • Reducción de la función global

En Python 3, la función reduce (,) ha sido eliminada del espacio de nombres global y ahora se encuentra en el módulo fucntools.

Las notas Python 2 Python 3 también
reducción (a, b, c) de las herramientas funcionales de importación reducen reducen (a, b, c)
  • La función global apply ((()

Python 2 tiene una función global llamada apply (), que usa una función f y una lista [a, b, c] como parámetros, y devuelve el valor f (a, b, c). También puedes hacer lo mismo al llamar directamente a la función y añadir un asterisco (a) antes de la lista.

Las notas Python 2 Python 3 también
Aplicar (una función, una lista de argumentos) a_función(*una_lista_de_argumentos)
Aplicar ((una_función, una_lista_de_argumentos, un_dicionario_de_argumentos_nombrados) a_function ((*una_lista_de_args,**un_dicionario_de_args_nombrados)
Aplicar ((a_función, a_lista_de_argumentos+ z) a_función(*a_lista_de_args+z)
Aplicar ((aModule.a_function, a_list_of_args) aModule.a_function ((*una_lista_de_argumentos)

1, en su forma más simple, puede llamarse a la función añadiendo un asterisco antes de la lista de parámetros (como [a, b, c]) ; esto es equivalente a la función apply (() en Python 2. 2, en Python 2, la función apply puede tener en realidad 3 parámetros: una función, una lista de parámetros, un diccionario de argumentos nombrados. En Python 3, puedes añadir un asterisco antes de la lista de parámetros.), añadiendo dos asteriscos antes del parámetro de nombre del diccionario para lograr el mismo efecto. 3, el operador + se usa aquí como función de la lista de conexiones y tiene mayor prioridad que el operador, por lo que no es necesario añadir paréntesis adicionales alrededor de a_list_of_args + z. Los scripts 4, 2 to 3 son lo suficientemente inteligentes como para convertir llamadas complejas de apply (), incluyendo llamadas a funciones de importación en módulos.

  • Función interna global

En Python 2, puedes limitar la función interna en una cadena con la función interna para optimizar el rendimiento. En Python 3, la función interna se traslada al módulo sys.

Las notas Python 2 Python 3 también
En el caso de la intermediación, Sys.intern ((aString) es el nombre de un sistema operativo.
  • La frase ejec

Al igual que las instrucciones de impresión se convierten en una función en Python 3, las instrucciones de ejec se convierten en una función. La función e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g. e.g.

Las notas Python 2 Python 3 también
código ejecString - ¿ Qué pasa?
Código ejecutivoString en el espacio de nombres global exec ((codeString, espacio de nombres global)
código ejecString en un espacio de nombres global, un espacio de nombres local exec ((codeString, espacio de nombres global, espacio de nombres local)

1, en su forma más simple, porque exec ((() es ahora una función, no una frase, 2to3 rodará este código en forma de cadena con paréntesis. La instrucción exec en Python 2 puede especificar un espacio de nombres, y el código se ejecutará en este espacio privado compuesto por objetos globales. Python 3 también tiene esta función; solo tienes que pasar este espacio de nombres como el segundo parámetro a la función exec (). 3, lo que es más sorprendente, es que la instrucción exec en Python 2 también puede especificar un espacio de nombres local (por ejemplo, una variable declarada en una función).

  • Expresión de archivo ejecutivo

Al igual que con las instrucciones anteriores de ejec, las instrucciones de ejecfile en Python 2 también pueden usar cuerdas como si ejecutaran código de Python. Diferentemente de ejec, ejec utiliza cuerdas y ejecfile utiliza archivos. En Python 3, la instrucción de ejecfile ya ha sido eliminada. Si realmente quieres ejecutar el código de Python de un archivo (pero no quieres importarlo), puedes hacerlo abriendo el archivo, leyendo su contenido y luego llamando a la función compile (compile) global (Python interpreter forces a compilar el código y luego llama a la nueva función exec).

Las notas Python 2 Python 3 también
execfile ((a_filename) exec ((compilar ((abrir ((a_filename).read(),a_filename,exec))
  • Repr (enmarcado con signos de referencia)

En Python 2, para obtener la representación de una cadena de un objeto arbitrario, hay una forma de envolver el objeto en una contracitación (por ejemplo,xEn Python 3, esta capacidad sigue existiendo, pero ya no se puede usar el anti-citado para obtener esta señal.

Las notas Python 2 Python 3 también
¿ Qué pasa? Representación
` Papaya Whip + `2 ` ¿Por qué no lo haces?

1, recuerda que x puede ser cualquier cosa, una clase, una función, un módulo, un tipo de datos básico, etc. ==repr== La función puede usar cualquier tipo de parámetros == 2, en Python 2, las contracitas pueden enmarcarse, lo que da lugar a esta expresión desconcertante (pero efectiva). 2to3 es lo suficientemente inteligente como para convertir esta llamada de enmarcado en la función repr.

  • Es una frase de prueba... excepto.

La sintaxis de captura de anomalías puede cambiar un poco de Python 2 a Python 3.

Las notas Python 2 Python 3 también
Intentar:
importar mymodule
excepto ImportError, e
pasar
Intentar:
importar mymodule
excepto ImportError como e:
pasar
Intentar:
importar mymodule
excepto (RuntimeError, ImportError), e
pasar
Intentar:
importar mymodule
excepto (RuntimeError, ImportError) como e:
pasar
Intentar:
importar mymodule
excepto ImportarError:
pasar
No hay cambio
Intentar:
importar mymodule
excepto:
pasar
No hay cambio

1, en comparación con Python 2 que añade coma después de un tipo excepcional, Python 3 utiliza una nueva palabra clave, as. 2, la palabra clave as también se puede usar para capturar varios tipos de anomalías a la vez. Si usted captura una excepción, pero no quiere acceder a la excepción en sí, la sintaxis de Python 2 y Python 3 es la misma. Similarmente, si usas un método de seguridad (fallback) para capturar todas las excepciones, la sintaxis de Python 2 y Python 3 es la misma. 5, Cuando se importa un módulo (o en la mayoría de los casos), no se debe utilizar este método (véase el fallback anterior); de lo contrario, el programa puede capturar una excepción como KeyboardInterrupt (si el usuario presiona Ctrl-C para interrumpir el programa), lo que dificulta el descifrado.

  • ¿Qué es lo que quiere decir?

En Python 3, hay cambios sutiles en la sintaxis para lanzar las anomalías personalizadas.

Las notas Python 2 Python 3 también
Levanta mi excepción No modificado
Aumentar MiExcepción, mensaje de error elevar MyException (Mensaje de error)
elevar MyException, mensaje de error, a_traceback elevar MyException (Mensaje de error).con_traceback (Un_traceback)
elevar mensaje de error sin soporte

1, la sintaxis no cambia en su forma más simple, cuando se lanza una excepción que no trae información errónea personalizada por el usuario. 2, cuando se quiere lanzar una excepción con un error de usuario personalizado, el cambio es obvio. Python 2 utiliza un punto para separar las excepciones y el error; Python 3 transmite el error como un parámetro a las excepciones. 3. Python 2 admite una sintaxis más compleja para lanzar una excepción con una retroceso personalizado del usuario (stack trace). En Python 2, puedes lanzar una excepción sin clase de excepción, con solo un mensaje de excepción. En Python 3, esta forma ya no es compatible. 2to3 te advertirá que no puede reparar esta sintaxis automáticamente.

  • Método de lanzamiento del generador

En Python 2, el generador tiene un método de lanzamiento. Llamar a_generator.throw () lanza una anomalía cuando el generador está suspendido y devuelve el siguiente valor obtenido por la función generadora. En Python 3, esta función sigue disponible, pero con una ligera diferencia en la sintaxis.

Las notas Python 2 Python 3 también
a_generator.throw ((Mi excepción) No hay cambio
a_generator.throw ((MyException, mensaje de error) a_generator.throw(MyException(mensaje de error))
a_generator.throw ((mensaje de error) sin soporte

En su forma más simple, el generador lanza una excepción que no contiene un mensaje de error personalizado por el usuario. En este caso, no hay cambios en la sintaxis de Python 2 a Python 3. Si el generador arroja una excepción con un error personalizado por el usuario, se necesita pasar la cadena de error a la clase de excepciones para instanciarla. Python 2 también es compatible con el lanzamiento de excepciones con solo mensajes de excepciones. Python 3 no es compatible con esta sintaxis, y 2to3 muestra un mensaje de advertencia que le dice que necesita reparar el código manualmente.

  • Función global xrange ())

En Python 2, hay dos maneras de obtener números en un determinado rango: rango (), que devuelve una lista, y rango (), que devuelve un iterador. En Python 3, rango (), que devuelve un iterador, xrange (), que ya no existe.

Las notas Python 2 Python 3 también
xrange ((10) el rango de las
a_list = rango ((10) a_list = lista (rango)
[i para el rango interno (i) 10) ] [i para el rango interno (i) 10) ]
para i en el rango ((10)): No hay cambio
cantidad (rango) No hay cambio

1, en el caso más simple, 2to3 simplemente convierte xrange (()) a range (()). 2, si su código Python 2 usa el rango ((), 2to3 no sabe si necesita una lista o si un iterador también funciona. Por precaución, 2to3 puede reportar errores y luego usar list (() para forzar la conversión del valor de retorno del rango (() al tipo de lista. 3, Si la función xrange () está presente en el análisis de listas, no es necesario convertir su valor de retorno a una lista, ya que el análisis de listas es igualmente efectivo para los iteradores. 4, de manera similar, el ciclo for también funciona en el iterador, por lo que no cambia nada aquí tampoco. 5, la función sum puede funcionar en el iterador, por lo que 2to3 tampoco se modifica aquí. Al igual que el método de la clase de diccionario que devuelve el valor como vista en lugar de lista, esto también se aplica a min (), max (), sum (), list (), tuple (), set (), sorted (), any (), all (), etc.

  • Las funciones globales raw_input (()) y input (())

Python 2 tiene dos funciones globales que se utilizan en la línea de comandos para solicitar la entrada del usuario. La primera se llama input, que espera que el usuario ingrese una expresión de Python y luego devuelve el resultado. La segunda se llama raw_input, que devuelve lo que el usuario ingresa. Esto es muy confuso para los principiantes y se considera ampliamente como un chicle de la lengua Python.

Las notas Python 2 Python 3 también
En el caso de los datos de datos, entrada (()
¿Por qué no lo haces? Entrada (¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
entrada (() Valoración de los datos

1, en su forma más simple, raw_input (()) se sustituye por input (()). 2, en Python 2, la función raw_input (() puede especificar un puntero como parámetro. En Python 3 se conserva esta función. Si realmente quieres pedirle al usuario que introduzca una expresión de Python, puedes calcular el resultado llamando a la función input() y luego pasar el valor de retorno a eval().

  • Función propiedad func_*

En Python 2, el código dentro de una función tiene acceso a las propiedades especiales de la función misma. En Python 3, estas propiedades especiales se renombraron para ser consistentes.

Las notas Python 2 Python 3 también
a_function.func_name El nombre de la función - ¿Qué quieres decir?nombre_
a_función.func_doc - ¿Qué quieres decir?- ¿ Qué pasa?
a_function.func_defaults (en inglés) - ¿Qué quieres decir?Definiciones
a_function.func_dict - ¿Qué quieres decir?- ¿ Qué dices?
a_función.func_closure - ¿Qué quieres decir?Cierre
A_función.func_globals - ¿Qué quieres decir?- ¿Qué quieres decir?
a_function.func_code y el código de la función - ¿Qué quieres decir?- ¿ Qué pasa?

1, el atributo __name__ ((original func_name) contiene el nombre de la función. 2, __doc__ propiedad ((originalfuncdoc) contiene una cadena de documentos (docstring) que usted define en el código fuente de la función 3,__defaults__ propiedad ((originalfunc_defaults) es un conjunto de elementos que guardan el valor predeterminado de los parámetros. 4,__dict__ propiedad (original func_dict) es un espacio de nombres que admite la propiedad de una función arbitraria. La propiedad __closure__ (original func_closure) es un conjunto de objetos de cel que contiene la vinculación de una función a una variable libre. 6. La propiedad __globals__ (original func_globals) es una referencia al espacio de nombres global del módulo, donde la función misma está definida. 7, __code__ propiedad (original func_code) es un objeto de código que representa un cuerpo de funciones después de su compilación.

  • Método de E/S xreadlines (en inglés)

En Python 2, los objetos de archivo tienen un método xreadlines (), que devuelve un iterador, una línea de lectura de un archivo a la vez. Esto es especialmente útil en el ciclo for. De hecho, las versiones posteriores de Python 2 agregaron esta función a los objetos de archivo mismos.

En Python 3, el método xreadlines (() ya no está disponible. 2 a 3 puede resolver situaciones simples, pero algunos casos de borde requieren intervención manual.

Las notas Python 2 Python 3 también
para la línea en a_file.xreadlines(): para la línea en a_file:
para la línea en a_file.xreadlines(5): No hay cambio (rotado)

1, si antes llamabas xreadlines sin parámetros, 2to3 lo convertiría en el objeto del archivo en sí mismo. En Python 3, este código después de la conversión puede hacer el mismo trabajo que antes: leer una línea del archivo una vez y luego ejecutar el ciclo de la bucle for. 2, si antes usaste un parámetro (cuantas líneas leer) para llamar a xreadlines (), 2to3 no puede completar la conversión de Python 2 a Python 3 para ti, tu código fallará de esta manera: AttributeError: _io.TextIOWrapper object has no attribute xreadlines. Puedes cambiar manualmente xreadlines ()) a readlines ()) para que el código funcione en Python 3.

  • Función lambda que utiliza el conjunto de elementos en lugar de varios parámetros

En Python 2, puedes definir una función lambda anónima para que la función pueda recibir varios parámetros, especificando el número de elementos de un conjunto de elementos como parámetros. De hecho, el intérprete de Python 2 desempaca este conjunto de elementos en argumentos nombrados, y luego puedes referirlos en la función lambda. En Python 3, aún puedes pasar un conjunto de elementos como parámetros de la función lambda, pero el intérprete de Python no lo analiza como parámetros de nombres.

Las notas Python 2 Python 3 también
El valor de las emisiones de CO2 de las emisiones de gases de efecto invernadero se calculará en función de las emisiones de CO2 de las emisiones de gases de efecto invernadero. El valor de las emisiones de CO2 de las emisiones de gases de efecto invernadero se calculará en función de las emisiones de CO2 de las emisiones de gases de efecto invernadero.
El valor de las emisiones de dióxido de carbono se calculará en función de las emisiones de dióxido de carbono. lambda x_y: x_y[0]+f(x_y[1])
El valor de las emisiones de CO2 de las emisiones de gases de efecto invernadero se calculará en función de las emisiones de CO2 de las emisiones de gases de efecto invernadero. 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 No modificado

1, si ya se ha definido una función lambda, que utiliza como parámetros un conjunto de elementos que contiene un elemento, en Python 3 se convierte en una función lambda que contiene referencias a x1[0]; x1 es un script de 2 a 3 generado automáticamente basado en los parámetros de nombre del conjunto original. La función lambda, que utiliza como parámetro el conjunto de dos elementos (x, y), se convierte en x_y, que tiene dos parámetros de posición, x_y[0] y x_y[1]; Los scripts 3, 2to3 incluso pueden manejar la función lambda que usa los parámetros de nombres de enlace como parámetros. El código resultante es un poco difícil de leer, pero tiene el mismo efecto en Python 3 que el código original en Python 2. 4, puedes definir una función lambda que use varios parámetros. Si no hay paréntesis alrededor de la función, Python 2 la trata como una función lambda que contiene varios parámetros; en este cuerpo de la función lambda, se citan estos parámetros por su nombre, como se hace en otras funciones de tipo. Esta sintaxis sigue siendo válida en Python 3.

  • Las propiedades de los métodos especiales

En Python 2, los métodos de clase pueden acceder a los objetos de clase que definen su clase, así como a los propios objetos de método. Im_self es el objeto de ejemplo de la clase; im_func es el objeto de función, im_class es la clase misma. En Python 3, estas propiedades se renombran para seguir las convenciones de nombres de otras propiedades.

Las notas Python 2 Python 3 también
aClassInstance.aClassMethod.im_func Las instrucciones de la clase Una instancia de clase. un método de clase._Función
aClassInstance.aClassMethod.im_self (Método de la clase en sí mismo) Una instancia de clase. un método de clase._Yo mismo.
aClassInstance.aClassMethod.im_class El método de la clase es el siguiente: Una instancia de clase. un método de clase._Yo mismo.._¿Qué clase?
  • Método especial de __nonzero__

En Python 2, puedes crear clases propias y hacerlas usables en un contexto booleano. Por ejemplo, puedes instanciar la clase y usar el objeto de la instancia en una oración si.No es cero() método, que devuelve el valor de True o False, el método se llama cuando el objeto de la instancia está en el contexto de Boole. En Python 3, todavía se puede realizar la misma función, pero el nombre de este método especial se convierte en¿Qué quieres decir?()。

Las notas Python 2 Python 3 también
clase A:
No es cero(sólo):
pase
clase A:
¿Qué quieres decir?(sólo):
pase
clase A:
No es cero(sólo, x, y):
pasar
No hay cambio

1, cuando Python 3 usa un objeto de clase en el contexto de Bur, Python 3 llama_¿Qué quieres decir?(), y no _No es cero¿Qué es esto? 2 sin embargo, si usted tiene una definición que usa dos parámetrosNo es cero() método, el script 2to3 asume que el método que definiste tiene otro uso y por lo tanto no modifica el código.

  • Tipo de octavo

Entre Python 2 y Python 3, la sintaxis de la definición de octal cambia ligeramente.

Las notas Python 2 Python 3 también
x = 0755 x = 0o755
  • sys.maxint

La constante sys.maxint ya no es precisa debido a la integración de los tipos longitudinales y integrales. Pero debido a que este valor es útil para la capacidad de detectar plataformas específicas, fue retenido por Python 3 y renombrado como sys.maxsize.

Las notas Python 2 Python 3 también
desde sys importmaxint desde sys importmaxsize
a_función (sys.maxint) a_function (sys.maxsize)

1, maxint se convierte en maxsize. 2, todos los sys.maxint se han convertido en sys.maxsize.

  • La función global es callable

En Python 2, puedes usar la función global callable para comprobar si un objeto es callable. En Python 3, esta función global está cancelada.Llama.La existencia de ().

Las notas Python 2 Python 3 también
Se puede llamar a cualquier cosa. No tiene nada, _Llama.’)
  • Función global ((zip)

En Python 2, la función global zip ((() puede usar varias secuencias como parámetros, y devuelve una lista compuesta por componentes. El primer componente contiene el primer elemento de cada secuencia; el segundo componente contiene el segundo elemento de cada secuencia; y así sucesivamente. En Python 3, zip ((() devuelve un iterador, no una lista.

Las notas Python 2 Python 3 también
zip ((a, b, c) lista ((zip ((a, b, c))
d.join ((zip ((a, b, c)) No hay cambio

En su forma más simple, puede restablecer la función anterior de la función zip mediante la llamada del valor de retorno de la función list ((() para empaquetar zip (((), y la función list ((() recorre el iterador que devuelve esta función zip ((() y luego devuelve la lista de resultados. En un entorno contextual en el que ya se recorren todos los elementos de la secuencia (por ejemplo, la llamada del método join aquí), el iterador que devuelve zip puede funcionar correctamente. Los scripts 2to3 detectan estas situaciones y no hacen cambios en su código.

  • Error estándar

En Python 2, el StandardError es el subclase de todas las otras anomalías intrínsecas, excepto StopIteration, GeneratorExit, KeyboardInterrupt, SystemExit. En Python 3, el StandardError ha sido eliminado; se sustituye por Exception.

Las notas Python 2 Python 3 también
x = Error estándar (() x = Excepción
x =Error estándar ((a, b, c) x = Excepción (a, b, c)
  • Constantes en el módulo types

En Python 2, contiene constantes que representan todos los tipos de datos básicos, como dict e int. En Python 3, estas constantes ya se han eliminado. Solo se necesita reemplazarlas con el nombre del tipo básico.

Las notas Python 2 Python 3 también
types.UnicodeType el
types.StringType bytes
types.DictType dict
types.IntType Int
types.LongType Int
types.ListType lista
types.NoneType Tipo (Ninguno)
types.BooleanType Bool también
types.BufferType Vista de memoria
types.ClassType Tipo de producto
types.ComplexType complejo
types.EllipsisType tipo ((Elíptica)
types.FloatType flotación
types.ObjectType objetos
types.NotImplementedType Tipo (No ejecutado)
types.SliceType rebanada
types.TupleType la misma
types.TypeType Tipo de producto
types.XRangeType el rango

Types.StringType está mapeado en bytes, no en str, porque el parámetro de la cadena en Python 2 es en realidad una secuencia de bytes.

  • Función global en instancia

La función isinstance (() verifica si un objeto es una instancia de una clase específica o de un tipo específico. En Python 2, puedes pasar un elemento formado por tipos a una instancia, y si el objeto es de cualquier tipo del conjunto, la función devuelve True. En Python 3, puedes hacerlo, pero no es recomendable usar un tipo como parámetro para pasar dos veces.

Las notas Python 2 Python 3 también
es la instancia ((x, ((int,float,int)) es la instancia ((x, ((int, float))
  • Tipo de datos basestring

Python 2 tiene dos tipos de strings: una en Unicode y otra en no Unicode. Pero hay otro tipo, basestring. Es un tipo de datos abstracto, una superclase de tipos str y unicode. No se puede llamar directamente o instanciar, pero puedes usarlo como un parámetro de instance para detectar si un objeto es una cadena Unicode o una cadena no Unicode.

Las notas Python 2 Python 3 también
esinstance ((x, cadena de base) esinstancia ((x, str)
  • módulo de itertools

Python 2.3 introdujo el módulo de itertools, que define las variantes (variantes) de las funciones globales zip, map y filter, cuyo tipo de retorno es un iterador, no una lista. En Python 3, estas variantes en estos itertools se cancelaron debido a que el tipo de retorno de estas funciones globales es un iterador, por lo que todavía hay muchas otras funciones útiles en el módulo de itertools, no solo las mencionadas anteriormente.

Las notas Python 2 Python 3 también
Las herramientas iter.izip (a, b) zip ((a, b)
Itertools.imap (a) y (b) mapa (a, b)
las herramientas iter.ifilter ((a, b) filtro (a, b)
desde itertools importar imap, izip, foo desde itertools importar foo

1, utiliza la función zip ((() de todo el mundo, en lugar de itertools.izip ((()). 2、 Utiliza el mapa en lugar de itertools.imap. 3,itertools.ifilter ((() se convierte en filtro ((() ▽ El módulo de itertools sigue existiendo en Python 3, pero ya no contiene funciones que ya se han trasladado al espacio de nombres global. Los guiones 2to3 pueden ser lo suficientemente inteligentes como para eliminar las declaraciones de importación que ya no son útiles, manteniendo la integridad de otras declaraciones de importación.

  • Sys.exc_type, sys.exc_value, sys.exc_traceback El valor de la función de seguimiento de la función de seguimiento de la función de seguimiento de la función

Cuando se trata de excepciones, hay tres variables a las que se puede acceder en el módulo sys: sys.exc_type, sys.exc_value, sys.exc_traceback. En realidad, estas ya existían en la era de Python 1.

Las notas Python 2 Python 3 también
Sys.exc_type: el tipo de la aplicación Sys.exc_info (()) [0]
Sys.exc_value es el valor de la función de sys.exc_info (()) [1]
Sys.exc_traceback (en inglés) sys.exc_info() [2]
  • Parálisis de la lista de elementos

En Python 2, si necesitas escribir una lista de parámetros que atraviese un grupo de elementos, no necesitas poner paréntesis alrededor de los valores de los elementos. En Python 3, estos paréntesis son necesarios.

Las notas Python 2 Python 3 también
[i para los 1,2] [i para iin(1,2)]
  • Función os.getcwdu (())

Python 2 tiene una función llamada os.getcwd (), que devuelve el directorio de trabajo actual como una letra (no codificada en Unicode). Dado que los sistemas de archivos modernos pueden manejar nombres de directorio que pueden ser codificados por varios caracteres, Python 2.3 introduce la función os.getcwdu (), que devuelve la letra codificada en Unicode en el directorio de trabajo actual.

Las notas Python 2 Python 3 también
¿Qué quieres decir? ¿Qué quieres decir con eso?
  • Metaclases

En Python 2, se puede crear una metaclase mediante la definición de los parámetros de metaclase en la declaración de la clase, o bien mediante la definición de una propiedad especial de clase a nivel de clase. En Python 3, la propiedad de _metaclass__ ha sido eliminada.

Las notas Python 2 Python 3 también
clase C ((metaclase=PapayaMeta):
aprobar
No modificado
La clase Whip:
_- ¿ Qué pasa?= PapayaMeta
clase Whip ((metaclass=PapayaMeta):
pase
clase C ((Bateador, Bateador):- ¿ Qué pasa?= PapayaMeta clase C ((Whipper,Beater,metaclass=PapayaMeta):
aprueba

1, cuando se declara una clase, se declara el parámetro de la metaclase, lo cual es válido en Python 2 y Python 3, que son los mismos. 2, en la definición de la clase se declara que el atributo __metaclass__ es válido en Python 2, pero ya no lo es en Python 3. 3, 2to3 puede construir una declaración de clase válida, incluso si la clase hereda de varias clases padres.

  • Sobre el estilo de código

Las siguientes correcciones no son verdaderas correcciones; es decir, son sólo cosas sobre el estilo del código y no se relacionan con la esencia del código. Pero los desarrolladores de Python tienen un interés muy grande en hacer que el estilo del código sea lo más uniforme posible. Para ello, hay un manual oficial dedicado a describir el estilo del código de Python.

  • set (literal) (explicado)

En Python 2 la única manera de definir un conjunto de valores literal es llamando set a_sequence. En Python 3 esto sigue siendo válido, pero el uso de una nueva notación literal: paréntesis mayúsculas es una forma más clara. Este método es válido además de los conjuntos en blanco, ya que el diccionario también utiliza paréntesis mayúsculas, por lo que {} indica un diccionario en blanco, no un conjunto en blanco.

Los scripts de 2to3 no repararán por defecto el valor de set (()) literal. Para activar esta función, especifique el parámetro -f set_literal cuando llame a 2to3 en la línea de comandos.

Las notas Antes de Después
conjunto (([1,2,3]) {1,2,3}
conjunto (((1,2,3)) {1,2,3}
conjunto (([i para iin a_sequencia]) {i para dentro de una_ secuencia}
  • Buffer de funciones globales

Los objetos de Python implementados en C pueden exportar una interfaz de búfer que permite a otro código de Python leer y escribir directamente en un bloque de memoria. Esto suena muy poderoso, pero también es terrible. En Python 3, el buffer fue renombrado como memoryview. Las modificaciones reales son más complejas, pero casi se pueden ignorar estas diferencias.

Los scripts de 2to3 no repararán la función buffer (() por defecto. Para activar esta función, especifique el parámetro -f buffer cuando llame a 2to3 en la línea de comandos.

Las notas Antes de Después
x = amortiguador y x = vista de memoria (y)
  • Espacio alrededor del punto (obvio)

A pesar de que Python es muy estricto con respecto a los espacios para recortar y resaltar (indenting y outdenting), Python es libre de usar espacios en otros aspectos. En listas, módulos, conjuntos y diccionarios, los espacios pueden aparecer delante o detrás de los comas, lo que no tiene ningún efecto negativo. Sin embargo, el manual de estilo de código de Python indica que no se puede tener un espacio antes de los comas y que debe haber un espacio después de los comas.

Por defecto, el script 2to3 no repara los espacios alrededor de las comillas. Para activar esta función, especifique el parámetro -f wscomma cuando se llama 2to3 en la línea de comandos.

Las notas Antes de Después
a, b a, b y c
- ¿Por qué no? - ¿Qué quieres decir?
  • Idiomas comunes y expresivos

Muchas prácticas se han establecido en la comunidad de Python. Algunas son como while 1: loop, que se remonta a Python 1. (Python no tuvo tipos de bulls en sentido real hasta Python 2.3, por lo que los desarrolladores antes usaban 1 y 0 alternativos.)

Los scripts de 2to3 no hacen reparaciones por defecto para estas convenciones. Para activar esta función, especifique el parámetro -f idioms cuando llame a 2to3 en la línea de comandos.

Las notas Antes de Después
mientras que 1:
do_stuff()
mientras que True:
do_stuff()
tipo ((x) == T Es el caso ((x, T)
el tipo ((x) es T Es el caso ((x, T)
a_lista = lista ((a_secuencia) a_list = ordenado (a_secuencia)
a_list.sort (() ¿Qué es esto?
¿Qué es esto?

Traducido porEl blog de CSDN

Cómo convertir el código de Python 2 en Python 3

En este artículo, se explica cómo convertir el código de Python 2.x en código de Python 3.x. Cómo convertir el código de Python 2.x en Python 3.x

  • 1.自己手动转换

Esto no tiene que decir mucho si sólo se trata de unas pocas funciones, como print, etc.

Si no lo haces, entonces puedes cambiar tu propio código.

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

La versión 2.x de Python, como Python 2.7.2, que he instalado, viene con algunas herramientas útiles después de que Windows la descargue y la instale.

其中一个叫做2to3.pyEn el caso de Python 2.x, el código de Python 2.x se convierte en código de Python 3.x.

Está ubicado en: Directorio raíz de instalaciones de Python\Python27\Tools\Scripts\2to3.py

如何利用2to3.pyImplementar el código de Python 2.x para convertirlo en el código de Python 3.x Por ejemplo, tengo un guión de Python 2.x:

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

Ahora, quiero convertirlo en código de Python 3.x.

Se puede abrir el cmd de windows, ubicarlo debajo del script que se quiere convertir y ejecutarlo.

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

El resultado de una conversión exitosa es:

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

En este punto, se puede ver el original 34563664_data_from_site.py, que se ha convertido en la versión 3.x de Python.


Más.

¿ Qué haces?¿Qué es Python 2 para botvs?

Un sueño pequeño.El servidor de repetición de BotVS utiliza la versión 2.7 de Python, que es compatible con las plataformas BotVS Python 2 y Python 3.