Red de conocimiento de abogados - Derecho de sociedades - ¿Qué cambios hay entre python3 y python2.7? ¿Python3 se generalizará?

¿Qué cambios hay entre python3 y python2.7? ¿Python3 se generalizará?

La diferencia entre python3 y python2.7

1. ¿Rendimiento?

Py3.0 ejecuta pystone benchmark 30 veces más lento que Py2.5. Guido cree que Py3.0 tiene un gran margen de optimización y puede lograr buenos resultados de optimización en operaciones de cadenas y números enteros.

?

El rendimiento de Py3.1 es 15 veces más lento que el de Py2.5 y todavía hay mucho margen de mejora. ?

2. ¿Codificación?

Los archivos de código fuente Py3.X utilizan codificación utf-8 de forma predeterminada, lo que hace que el siguiente código sea legal:?

gt; gt; gt; China = 'china'?

gt; gt; imprimir (China)?

china?

3. p>

1) Eliminado lt; gt;, ¡todo usado! =?

2) Eliminado ``, ¿todo usado repr()?

3) Clave Agregar como y con las palabras, así como Verdadero, Falso y Ninguno?

4) La división de enteros devuelve un número de coma flotante. Para obtener un resultado entero, utilice //?

. 5) Agregar declaración no local. ¿Se pueden asignar variables periféricas (no globales) directamente usando noclocal x?

6) Elimine la declaración de impresión y agregue la función print() para lograr la misma función.

Lo mismo ocurre con la declaración exec, que se ha cambiado a la función exec().

Por ejemplo:?

?2.X: print "La respuesta es", 2*2?

?3.

?3.X: print(x, end=" ") # ¿Usar espacios para reemplazar líneas?

?2.X: print # ¿Imprimir nuevas líneas?

?3 .X: print() ? # ¿Imprimir nuevas líneas?

?2.X: print gt; error"?

?3.X: print("error fatal", file=sys.stderr)?

?2.X: print (x, y) ?# Salida repr((x, y))?

?3.X: print((x, y)) # ¡Diferente de print(x, y)?!

7) Cambios el comportamiento de los operadores secuenciales, como xlt; y, cuando x y el tipo y no coinciden, ¿se genera un TypeError en lugar de devolver un valor bool aleatorio?

8) La función de entrada ha sido cambiada. , raw_input se eliminó y se reemplazó con input:?

2.X: adivina = int(raw_input('Ingrese un número entero: ')) # ¿Cómo leer la entrada del teclado?

3.X: adivinar = int(input('Ingrese un número entero: '))

9) Eliminar el descomprimido del parámetro tupla. ¿No se puede def(a, (b, c)): pass define la función de esta manera?

10) La nueva variable de palabra octal, la función oct() se modifica en consecuencia.

?

2. El método de gt; gt; gt; oct(438)?

?'0666'?

3.X así:?

?gt; gt; gt; 0666?

?SyntaxError: token no válido (lt;pyshell#63gt;, línea 1)?

?gt; gt;gt; 0o666?

? 438?

?gt; gt; oct(438)?

?'0o666'?

11) ¿Se agregó la función bin() de suma literal binaria?

gt; gt; > gt; gt; gt; _438 = '0b110110110'?

gt;gt;gt; _438?

'0b110110110'?

12) Iterable extendido desembalaje. En Py3. ?

13) El nuevo super() ya no puede pasar parámetros a super(),?

gt; clase C (objeto):?

? def __init__(self, a):?

?print('C', a)?

gt; clase D(C): ?

? def __init(self, a):?

?super().__init__(a) # ¿Llamar a super() sin parámetros?

gt ; gt;gt; D(8)?

C 8?

lt;__main__.D objeto en 0x00D7ED90gt;?

14) Nueva sintaxis de metaclase :?

class Foo(*bases, **kwds):?

? pass?

15) Decorador de clases de soporte.

El uso es el mismo que el decorador de funciones:?

gt; gt; def foo(cls_a):?

?

? print('¡Hola mundo!')?

? cls_a.print = print_func?

? return cls_a?

gt; gt; @foo ?

clase C(objeto):?

? pasar?

gt;

¿¡Hola mundo!?

El decorador de clases se puede utilizar para hacer el truco de convertir al gato de algalia en un príncipe. Para obtener más información, consulte PEP 3129.

4. ¿Cadenas y cadenas de bytes?

1) Ahora las cadenas solo tienen un tipo: str, pero es diferente del 2. x versión de Unicode Casi lo mismo.

2) Con respecto a las cadenas de bytes, consulte el elemento 2 de "Tipo de datos".

5. ¿Tipo de datos?

1) Eliminación de Py3.X. El tipo largo ha sido reemplazado. Ahora solo hay un tipo entero: int, pero ¿se comporta como el largo en la versión 2.X?

2) Se agrega un nuevo tipo de bytes, correspondiente a los ocho tipos. en la versión 2.X Cadena de bits, el método para definir un literal de bytes es el siguiente:?

gt; b = b'china'?

gt; ; gt; type(b) ?

lt;type 'bytes'gt;?

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

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

gt; s?

'china'? p>

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

gt; b1?

b'china'?

3) Los métodos .keys(), .items y .values() de dict devuelven iteradores, mientras que las funciones iterkeys() anteriores y otras funciones se han abandonado. ¿También eliminado?

dict.has_key(), ¿deberíamos reemplazarlo con in?

6. ¿Orientado a objetos?

1) Introducir clases base abstractas ( Clases base abstractas, ABC). ?

2) Las clases de contenedor y las clases de iterador tienen el tamaño ABC, por lo que hay muchos más tipos en el módulo cellections que en Py2.5.

?

gt;gt;gt; ¿importar colecciones?

gt;gt;gt; print('\n'.join(dir(colecciones)))?

¿Invocable?

¿Contenedor?

¿Hashable?

ItemsView?

¿Iterable?

¿Iterador?

¿KeysView?

¿Mapeo?

¿MappingView?

¿MutableMapping?

¿MutableSequence?

¿MutableSet?

¿NamedTuple?

¿Secuencia?

¿Conjunto?

¿Tamaño?

ValuesView?

__todo__?

__integraciones__?

__doc__?

__archivo__?

__nombre__?

_abcoll?

_itemgetter?

_sys?

defaultdict?

deque?

Además, numérico tipos También tamaño ABC. Sobre estos dos puntos, ver PEP 3119 y PEP 3141. ?

3) ¿Se cambia el nombre del método next() del iterador a __next__() y se agrega la función integrada next() para llamar al método __next__() del iterador?

4) Se agregaron dos decoradores, @abstractmethod y @abstractproperty, para que sea más conveniente escribir métodos abstractos (propiedades).

?

7. ¿Excepciones?

1) Entonces, ¿las excepciones se heredan de BaseException y StardardError se elimina?

2) El comportamiento de secuencia de las clases de excepción y . ¿Atributo de mensaje?

3) ¿Usar rise Exception(args) en lugar de rise Exception, sintaxis de args?

4) Cambios de sintaxis para detectar excepciones, se introduce la palabra clave as para identificar instancias de excepción , en Py2.5:?

gt; gt; intente:?

... generar NotImplementedError('Error')?

. . excepto NotImplementedError, error:

... ¿imprimir error.mensaje?

...?

¿Error?

en. Py3.0:?

gt; gt; intentar:?

? generar NotImplementedError('Error')?

excepto NotImplementedError como error: # ¿Presta atención a esto como?

? print(str(error))?

¿Error?

5) Cadena de excepción, porque __context__ está en la versión 3.0a1. ¿No implementado en?

8. ¿Cambios en el módulo?

1) El módulo cPickle se ha eliminado y puede ser reemplazado por el módulo pickle. Con el tiempo tendremos un módulo transparente y eficiente. ?

2) ¿Se eliminó el módulo imageop?

3) Se eliminó audiodev, Bastion, bsddb185, excepciones, linuxaudiodev, md5, MimeWriter, mimify, popen2, ?

¿Módulos rexec, sets, sha, stringold, strop, sunaudiodev, timing y xmllib?

4) Se eliminó el módulo bsddb (publicado por separado, disponible en http://www.jcea.es /programacion/pybsddb. htm)?

5) ¿Se eliminó el nuevo módulo?

6) Las funciones os.tmpnam() y os.tmpfile() se movieron al módulo tmpfile ¿Siguiente?

7) El módulo tokenize ahora funciona usando bytes.

El punto de entrada principal ya no es generate_tokens, sino tokenize.tokenize()?

9.

1) Se cambia el nombre de xrange() a range(). use range () Para obtener una lista, debe llamarla explícitamente:?

gt; list(range(10))?

[0, 1, 2 , 3, 4 , 5, 6, 7, 8, 9]?

2) El objeto de bytes no puede realizar hash y no admite b.lower(), b.strip() y b. métodos split(), pero para los dos últimos se pueden usar b.strip(b' ?

\n\t\r \f') y b.split(b' ') para lograr el mismo propósito ?

3) zip(), map() y filter() devuelven iteradores. Las funciones apply(), callable(), coerce(), execfile(), reduce() y reload?

() han sido eliminadas

Ahora puedes usar hasattr() para reemplazar callable(). La sintaxis de hasattr() es como: hasattr(string, '__name__')

4) string.letters y .lowercase y .uppercase relacionados se han eliminado, utilice string. .ascii_letters en lugar ¿Esperar?

5) Si x < y no se puede comparar, se genera una excepción TypeError. ¿La versión 2.x devuelve valores booleanos pseudoaleatorios?

6) Los miembros de la serie __getslice__ están abandonados. a[i:j] se convierte en a.__getitem__(slice(I, j)) o __setitem__ según el contexto y?

¿__delitem__ se llama?

7) El archivo la clase se llama Obsoleta, en Py2.5: ?

gt;gt;gt;file?

lt;type 'file'gt;?

En Py3. En ", línea 1, en lt; módulo;?

¿archivo?

NameError: el nombre 'archivo' no está definido