Latest web development tutorials

python2.X diferencia con la versión 3 .x

3.0 versiones de Python, a menudo referida como Python 3000, o simplemente Py3k. Con respecto a una versión anterior de Python, esto es una mejora importante.

Con el fin de no llevar demasiada carga, Python 3.0 no tiene en cuenta en el diseño de compatibilidad hacia abajo.

Para muchos programas diseñados versiones anteriores de Python no funcionen correctamente en Python 3.0.

Con el fin de cuidar el programa existente, Python 2.6 como una versión provisional del Python 2.x utilizando la sintaxis básica y bibliotecas, teniendo en cuenta la migración a Python 3.0 y Python 3.0 permite el uso de parte de la sintaxis de la función.

Se recomienda el nuevo programa para utilizar la sintaxis de Python 3.0 versión de Python.

A menos que el entorno de ejecución no puede instalar Python 3.0 o el programa en sí no es compatible con el uso de bibliotecas de terceros Python 3.0. Actualmente no admite bibliotecas de terceros Python 3.0 están trenzados, py2exe, PIL y similares.

La mayoría de las bibliotecas de terceros están tratando de Python 3.0 versión compatible. Si no utilizar inmediatamente Python 3.0, también recomendó el desarrollo de la versión compatible con Python 3.0 del programa, y ​​luego usar Python 2.6, Python 2.7 se lleva a cabo.

Los cambios en Python 3.0 es principalmente en las siguientes áreas:


función de impresión

sentencia de impresión se ha ido, reemplazado por una función de impresión (). Python 2.6 y Python 2.7 el apoyo, en parte, esta forma de sintaxis de impresión. En Python 2.6 y Python 2.7 en el interior, tres formas son equivalentes:

print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数

Sin embargo, Python 2.6 ha hecho apoyar la sintaxis nueva impresión ():

from __future__ import print_function
print("fish", "panda", sep=', ')

Unicode

Python 2 tenía str ASCII () tipo, Unicode () por sí sola, no de tipo byte.

Ahora, en Python 3, por fin tenemos Unicode cadena (UTF-8) y un byte de clase: bytes y bytearrays.

Debido Python3.X archivo fuente por defecto codificación UTF-8, por lo que el siguiente código es legal:

>>> 中国 = 'china' 
>>>print(中国) 
china

Python 2.x

>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

Python 3.x

>>> str = "我爱北京天安门"
>>> str
'我爱北京天安门'

división

división de Python en otros idiomas que el extremo más alto, hay un conjunto muy complejo de reglas. Python en la división con dos operadores, y / //

En primer lugar, / División:

En la pitón 2.x / división igual que la mayoría de nosotros estamos familiarizados con el lenguaje, como Java ah ah C es similar a los resultados de una división entera fue un entero, la parte fraccionaria se ignora por completo, decimal división de coma flotante seguirá siendo una parte de la escapada resultados número de coma flotante.

En el pitón 3.x / división ya no lo hacen, y por la división entre números enteros, el resultado será un flotador.

Python 2.x:

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

3.x Python:

>>> 1/2
0.5

Para // división, esta división se llama división de piso, el resultado será la división automáticamente una operación de suelo es la misma en Python 2.x y 3.x pitón en.

pitón 2.x:

>>> -1 // 2
-1

pitón 3.x:

>>> -1 // 2
-1

Tenga en cuenta que no se descarta la parte decimal, pero para llevar en el suelo operación, si desea interceptar la parte fraccionaria, es necesario utilizar trunc módulo de funciones matemáticas

pitón 3.x:

>>> import math
>>> math.trunc(1 / 2)
0
>>> math.trunc(-1 / 2)
0

anormal

Procesamiento en Python 3 es también cambia ligeramente anormales, en Python 3, que ahora usamos como palabra clave.

Sintaxis para la captura de excepciones hechasa excepción exc, var cambiado excepto exc como var.

Sintaxis excepción (EXC1, EXC2) como var puede capturar las excepciones múltiples categorías. Python 2.6 tiene soporte tanto para la sintaxis.

  • 1. época 2.x, son todos los tipos de objetos que pueden ser lanzadas directamente en la era 3.x, sólo se heredados de objetos BaseException pueden ser lanzadas.
  • 2. Declaración 2.x aumento lanza una coma para separar los tipos de objeto y los parámetros, 3.x cancelado esta maravillosa redacción llame directamente al constructor lanza un objeto puede ser.

En la era 2.x, anomalías en el código, además de que los errores de procedimiento, sino también a menudo algunas estructuras de control comunes deben hacer, en 3.x puede verse, los diseñadores hacen un cambio anormal más específica sólo en el error con la excepción del caso con el fin de atrapar declaración de manejar.


xrange

Crear iteración objeto en Python 2 en el uso xrange () es muy popular. Por ejemplo: para el bucle o una lista / colección / del diccionario por comprensión.

Este rendimiento es muy generador de imagen (por ejemplo. "La evaluación perezosa"). Pero el xrange-iterables es infinito significa, sin límite que se puede recorrer.

Debido a su evaluación perezosa, no sólo si no se puede atravesar una vez, xrange () intervalo de relación en función de () más rápido (por ejemplo, para los ciclos). Sin embargo, en comparación con una iteración, la iteración no se recomienda repetir varias veces, debido a que el generador desde cero cada vez.

En Python 3, range () es como xrange () con el fin de conseguir una función específica xrange () ya no existe (en Python 3 xrange () lanzará un nombre de excepción).

import timeit

n = 10000
def test_range(n):
    return for i in range(n):
        pass

def test_xrange(n):
    for i in xrange(n):
        pass   

Python 2

print 'Python', python_version()

print '\ntiming range()' 
%timeit test_range(n)

print '\n\ntiming xrange()' 
%timeit test_xrange(n)

Python 2.7.6

timing range()
1000 loops, best of 3: 433 µs per loop


timing xrange()
1000 loops, best of 3: 350 µs per loop

Python 3

print('Python', python_version())

print('\ntiming range()')
%timeit test_range(n)

Python 3.4.1

timing range()
1000 loops, best of 3: 520 µs per loop
print(xrange(10))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-5-5d8f9b79ea70> in <module>()
----> 1 print(xrange(10))

NameError: name 'xrange' is not defined

representación literal octal

número octal debe escribirse 0o777, la forma original de 0777 no se puede utilizar; debe ser escrito en 0b111 binario.

función Añadido un bin () se utiliza para convertir un número entero en una cadena binaria. Python 2.6 tiene soporte tanto para la sintaxis.

En Python 3.x, y octal literal de una sola manera, es decir 0o1000.

python 2.x

>>> 0o1000
512
>>> 01000
512

3.x pitón

>>> 01000
  File "<stdin>", line 1
    01000
        ^
SyntaxError: invalid token
>>> 0o1000
512

operadores de desigualdad

Python 2.x no quiere decir que hay dos maneras de escribir! = Y <>

3.x Python para caer los <> Sólo! = Manera de escribir, pero afortunadamente, nunca uso <> dieta


Se ha eliminado la expresión `` repr

Python 2.x con comillas `` repr función es equivalente a la función de

3.x Python dejar caer la `` notación, sólo se permite la función repr, el propósito de hacerlo es hacer que el código se ve más claro que? Pero me siento con la oportunidad de repr raramente, por lo general sólo cuando se utiliza en la depuración, la mayoría de las veces o utilizar la función str a una cadena que describe el objeto.

def sendMail(from_: str, to: str, title: str, body: str) -> bool:
    pass

Una pluralidad de módulos se renombró (según PEP8)

El nombre antiguo nuevo nombre
_winreg winreg
ConfigParser ConfigParser
copy_reg copyreg
cola cola
SocketServer socketserver
repr reprlib

StringIO módulo se ha incorporado en el nuevo módulo io. se eliminan nuevas, MD5, módulos gopherlib. Python 2.6 tiene soporte para el nuevo módulo io.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Galleta, cookielib ser incorporados en el paquete http.

Cancelar la sentencia exec, sólo la función exec (). Python 2.6 tiene la función de apoyo exec ().


5. Tipos de datos

1) Py3.X retira tipo largo, ahora sólo hay un número entero --int, pero se comporta como una versión 2.X de la larga

2) Añadido bytes de tipo correspondiente a la versión 2.X de la serie de ocho, definir un método literal bytes es el siguiente:

>>> b = b'china' 
>>> type(b) 
<type 'bytes'> 

str objetos y objetos bytes pueden utilizar .encode () (str -> bytes) o .decode () - Método (bytes str>) unos en otros.

>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode() 
>>> b1 
b'china' 

3) dict de .keys (),. Artículos y .values ​​() devuelve un iterador, mientras que los iterkeys anteriores () y otras funciones se descartan. Al mismo tiempo existe eliminado dict.has_key (), reemplazarlo en ella.