Red de conocimiento informático - Problemas con los teléfonos móviles - La diferencia entre python3 y python2

La diferencia entre python3 y python2

Deberías ser nuevo en Python, se recomienda que aprendas Python 3.x directamente

Las siguientes son las diferencias entre las versiones de Python 2.x y 3.x:

Python 3.0 a menudo se llama Python 3000, o Py3k para abreviar. Esta es una actualización importante en comparación con versiones anteriores de Python.

Para evitar trámites burocráticos, Python 3.0 no está diseñado para ser compatible con versiones anteriores.

Muchos programas diseñados para versiones anteriores de Python no se ejecutarán correctamente en Python 3.0.

Con el fin de adaptarse a los programas existentes, se lanza Python 2.6 como una versión de transición, utilizando básicamente la sintaxis y librerías de Python 2.x, y teniendo en cuenta la migración a Python 3.0, permitiendo el uso de Algunas sintaxis y funciones de Python 3.0.

Se recomienda que los nuevos programas Python utilicen la sintaxis Python 3.0.

A menos que el entorno de ejecución no sea compatible con Python 3.0 o que el programa en sí utilice una biblioteca de terceros que no sea compatible con Python 3.0. Actualmente, las bibliotecas de terceros que no son compatibles con Python 3.0 incluyen Twisted, py2exe, PIL, etc.

La mayoría de las bibliotecas de terceros están trabajando arduamente para ser compatibles con Python 3.0. Incluso si no tiene acceso inmediato a Python 3.0, se recomienda que escriba un programa compatible con Python 3.0 y luego lo ejecute usando Python 2.6 o Python 2.7.

Los principales cambios en Python 3.0 son:

1.Función de impresión

La declaración de impresión ya no está disponible y es reemplazada por la función print(). Python 2.6 y Python 2.7 admiten parcialmente esta forma de sintaxis de impresión. En Python 2.6 y Python 2.7, las siguientes tres formas son equivalentes: print?"fish"

print?#Tenga en cuenta que hay un espacio después de print

print("fish") ?#print() no puede aceptar ningún otro argumento

Sin embargo, Python 2.6 en realidad admite la nueva sintaxis print(): from?__future__?import?print_function

print("fish ", ? "panda",?sep=',?')

2.Unicode (esta es una muy buena mejora)

Python 2 tiene el tipo ASCII str(), unicode( ) es único, no un tipo de byte.

Ahora, en Python 3, finalmente tenemos cadenas Unicode (utf-8) y clases de bytes: bytes y matrices de bytes.

Dado que los archivos fuente de Python 3.X usan codificación utf-8 de forma predeterminada, esto hace que el siguiente código sea legal: gt;gt;gt.China? =?

gt;gt; gt; ?print(china)?

china

Python 2.xgt;gt;gt;?Me encanta la Plaza de Tiananmen de Beijing"

gt;gt; gt; ?str

'xe6x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5xa4\xe5xa9\xaex89\xe9\x97\xa8'

gt;gt;gt;?str?=?u "Me encanta la plaza de Tiananmen, Beijing"

gt;gt;gt;?str

u'\u6211\ u7231\ u5317\u4eac\u5929\u5b89\u95e8'

Python 3.xgt;gt; gt;?str?=?"Me encanta Beijing Tiananmen"

gt;gt; gt; ?str

'Me encanta Beijing Tiananmen'

3. Operación de división

En comparación con otros lenguajes, la operación de división en Python es de muy alta gama. , y hay reglas muy complejas. Hay dos operadores de división en Python, / y //

Primero, hablemos de /division:

En Python 2.x, / división Similar a la operación de división en otros idiomas. El resultado de dividir por un número entero es un número entero y la parte decimal del número entero se ignora, mientras que la división por un número de coma flotante conserva la parte decimal del número entero y el resultado es flotante. número de punto.

En Python 3.x, /divide ya no hace esto, y para divisiones entre números enteros, el resultado también será un número de punto flotante

Python 2.x. : gt;gt;gt;?1?/ ?2

gt;gt;gt;?1.0?/?2.0

0.5

Python 3. x: gt;gt;gt;?1/ 2

0.5

Para // división, esta división se llama división de piso, que realizará automáticamente la operación de piso en el resultado de la división, que es consistente en python 2.x y python 3.x

python 2.xgt;gt;gt;?-1?//?2

-1

python 3.x:gt;gt ;gt;?-1?//?2

-1

Tenga en cuenta que no descartó la parte decimal. Realizó la operación de piso. Si desea interceptar la parte decimal, debe utilizar la función trunc del módulo matemático

python 3.x: gt; gt;? ; gt; gt; gt;?math.trunc(1 ?/?2)

gt;gt;gt;?math.trunc(-1?/?2)

4. Excepción

Manejo de excepciones También hay cambios sutiles en Python 3. En Python 3, ahora usamos as como palabra clave.

La sintaxis para detectar excepciones ha cambiado de "except exc, var?" a "except exc as var".

Utilice la sintaxis excepto (exc1, exc2) como var para detectar múltiples tipos de excepciones al mismo tiempo.

1. En la era 2.x, todo tipo de objetos se pueden lanzar directamente, mientras que en la era 3.x, solo se pueden lanzar objetos que heredan de BaseException.

2. La declaración rise en 2.x usa comas para separar el tipo de objeto y los parámetros que se lanzarán, pero en 3.x se abandona esta extraña forma de escribir y se llama directamente al constructor para lanzar el objeto. objeto.

En la era 2.x, además de indicar errores del programa, las excepciones a menudo hacían lo que las estructuras de control ordinarias deberían hacer en el código en 3. Para ser más especializado, puede usar declaraciones de captura de excepciones solo cuando; se produce un error.

5. xrange

Usar xrange() para crear objetos iterables es muy popular en Python 2. Por ejemplo: bucle for o derivación de lista/conjunto/diccionario.

Se comporta de forma muy parecida a un generador (es decir, "evaluación diferida"). Pero este xrange-iterable es infinito, lo que significa que puedes iterarlo infinitamente.

Dado que la función xrange() se evalúa de forma diferida, será más rápida que range() si se recorre más de una vez (como en un bucle for). Aún así, no recomendamos hacerlo varias veces en lugar de solo una, ya que el generador comenzará desde cero cada vez.

En Python 3, la implementación de range() es similar a xrange(), por lo que ya no hay una función xrange() dedicada (xrange() genera una excepción con nombre en Python 3). import?timeit

n?=?10000

def?test_range(n):

return?for?i?in?range(n):

pasar

def?test_xrange(n):

for?i?in?xrange(n):

pasar

Python 2¿imprimir?

timeit?test_range(n)

¿imprimir?

timeit?test_xrange(n)

Python ?2.7.6

¿timing?

Python 3print('Python',?python_version())

print('\ntiming?range()' )

timeit?test_range(n)

Python?:?520?s?per?loopprint(xrange(10))

------ -------------------------------------------------- ------------------

NameErrorTraceback?(¿más?reciente?llamada?última)

lt;ipython-input- 5 -5d8f9b79ea70gt;?in?lt;modulegt;()

----gt;?1?print(xrange(10))

NameError: ?name?xrange' indefinido

6. Representación literal octal

El número octal debe escribirse como 0o777. La forma original 0777 ya no es aplicable; el número binario debe escribirse como 0b111.

Se agrega la nueva función bin() para convertir números enteros en cadenas binarias. Python 2.6 ya admite ambas sintaxis.

En Python 3.x, sólo hay una forma de representar un literal octal, y es 0o1000.

python 2.xgt;gt;gt;?0o1000

512

gt;gt;gt;?01000

512python 3 .xgt;gt;gt;?01000 Archivo ?"lt;stdingt;",?línea 1

01000

^

Error de sintaxis: ?¿token no válido?

gt; gt; gt;?0o1000

512

7. Operadores de desigualdad en Python 2.x

No Hay dos maneras de escribirlo! = y lt;gt;

Python 3. Se eliminó la expresión repr ```

El acento grave ``` equivalente a la función repr en Python 2.x

El método de escritura ``` se eliminó en Python 3.x, sólo se permite la función Repr, ¿se hace esto para que el código luzca más limpio? Pero creo que rara vez uso repr, generalmente solo cuando depuro. La mayoría de las veces sigo usando la función str para describir objetos en cadenas. def?sendMail(from_:?str,?to:?str,?title:?str,?body:?str)?-gt;?bool:

pasar

9 .Se ha cambiado el nombre de varios módulos (según PEP8)

El módulo StringIO ahora está fusionado con el nuevo módulo io. Se eliminaron módulos nuevos, md5 y gopherlib. Python 2.6 ya es compatible con el nuevo módulo io.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie y cookielib se han fusionado en el paquete http.

La declaración exec se cancela, dejando solo la función exec(). Python 2.6 ya admite la función exec().

10. Tipos de datos

1) Py3.X ha eliminado el tipo largo y ahora solo hay un tipo entero: int, pero su comportamiento es similar al largo en el 2. Versión .X

2) Tipo de bytes agregados. Correspondiente a la cadena octal en la versión 2.X, el literal de byte se define de la siguiente manera: gt; gt; gt;?b?=?b'china'?

gt;gt;gt;? (b)?

lt;type?'bytes'gt;

Los objetos str y bytes pueden usar .encode() (str -gt; bytes) o .decode() ( bytes -gt; str) métodos para convertir entre sí.

gt; gt; gt;?s?=?b.decode()?

gt; gt;?s?

'china'?

gt;gt;gt;?b1?=?s.encode()?

gt;gt;gt;?b1?

b'china'

3) Los métodos .keys(), .items y .values() de dict devuelven iteradores, mientras que las funciones anteriores (como iterkeys()) han quedado obsoletas. Además, dict.has_key() ha sido eliminado y reemplazado por in.