Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuáles son los cambios en python3 en comparación con python2.7? ¿Python3 se convertirá en algo común?

¿Cuáles son los cambios en python3 en comparación con python2.7? ¿Python3 se convertirá en algo común?

La diferencia entre python3 y python2.7

1.

Py3.0 es un 30% más lento que Py2.5 cuando se ejecuta el punto de referencia de pystone. Guido cree que Py3.0 tiene mucho espacio para la optimización en operaciones de cadenas y enteros, lo que puede lograr buenos resultados de optimización.

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

2. ¿Codificación?

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

>>> China = 'china'?

>>> imprimir(china)?

china?

3. ¿Gramática?

1) ¿Eliminar <> y reemplazar todo con ! =?

2) ¿Eliminar `` y reemplazar todo con repr()?

3) Agregue palabras clave como y con, y ¿Verdadero, Falso, Ninguno?

5) Agregue declaraciones no locales. ¿Usar noclocal x para asignar valores directamente a variables periféricas (no globales)?

6) Elimine la declaración de impresión y agregue la función print() para lograr el mismo propósito. De manera similar, ¿se ha cambiado la declaración ejecutiva a la función exec()?

Por ejemplo: ?

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

?3.X: print("La ¿La respuesta es", 2*2)?

?2.X: imprimir x, ?# ¿Usar coma al final para desactivar las nuevas líneas?

?3.X: print(x, end=" ") # ¿Usar espacios en lugar de nuevas líneas?

?2.X: imprimir # ¿Salir carácter de nueva línea?

?3.X: print() ? print() # ¿Salir nueva línea?

?2.X: imprimir >>sys.stderr, "error fatal" ?

?3.X: imprimir("error fatal", archivo=sys.stderr)?

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

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

7) ¿Cambió el comportamiento de los operadores secuenciales (como x

8) Cambió la función de entrada, eliminó raw_input y la reemplazó con entrada:

2.X:guess = int(raw_input('Ingrese un número entero: '))# ¿Leer la entrada del teclado?

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

9) Eliminar el desempaquetado del parámetro tupla.

¿Ya no podemos definir funciones como def(a, (b, c)):pass?

10) Nuevo estilo para variables de palabras octales, ¿modificar la función oct() en consecuencia?

El método de 2.X es el siguiente: ?

? >>> 0666?

?438?

? >> oct (438)?

?' 0666'?

3. ¿Te gusta esto X: ?

? >>>

?SyntaxError: ¿token no válido (, línea 1)?

? >>> 0o666?

?438?

? >> > oct(438)?

?' 0o666'?

11) ¿Se han agregado literales binarios y la función bin()?

>>> bin(438 )?

'0b110110110'?

>>> _438 = '0b110110110'?

>>> _438?

'0b110110110 '?

12) Desempaquetado iterable extendido. En Py3.X, a, b, *rest = seq y *rest, a = seq son ambos legales y requieren solo dos condiciones: rest es un objeto de lista y seq es iterable.

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

>>> clase C(objeto):?

* def __init__(self, a):?

? print('C', a)?

>>> clase D(C):?

* def __init(self, a):?

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

>>>D(8)?

C 8?

<__main__.D objeto, ubicado en 0x00D7ED90>?

14 ) Nueva sintaxis de metaclase:?

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

Clase Foo(*bases, **kwds):? > p>

15) Soporte a decoradores de clases. El uso es el mismo que el decorador de funciones: ?

>>> def foo(cls_a):?

? def print_func(self):?

? print('¡Hola mundo!')?

? cls_a.print = print_func?

? p>

? pase?

>>> C().print()?

¡Hola mundo!

Los decoradores de clases se pueden utilizar para jugar cartas grandes sobre civetas. Para obtener más información, consulte PEP 3129?

4. ¿Cadenas y cadenas de bytes?

1) Las cadenas ahora solo tienen un tipo, str, pero es básicamente lo mismo que Unicode en la versión 2.x.

2) Para cadenas de bytes, consulte la entrada 2 de "Tipos de datos".

5.

1) Py3.

2) Se agrega un nuevo tipo de byte, que corresponde a la cadena octal en la versión 2.X:?

>>> b = b'china'?

>>> tipo(b)?

?

Los objetos str y bytes pueden usar .encode() (str -> bytes) O . Método decode() (bytes -> str) para convertir entre sí.

>>> s = b.decode()?

>>> s?

¿'china'?

>> > b1 = s.encode()?

>>> b1?

b'china'?

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

6 OO?

1) ¿Introducir clase base adaptativa (ABC)?

2) Las clases de contenedor y las clases de iterador están ABCizadas, por lo que hay muchos más tipos en el módulo cellections que en Py2.5.

>>> ¿importar colecciones?

>>> print('\n'.join(dir(collections)))?

¿Invocable?

¿Contenedor?

¿Hashable?

¿ItemsView?

¿Iterable?

¿Iterador?

¿TeclasView?

¿Mapeo?

¿MappingView?

¿Mapeo mutable?

¿Secuencia mutable?

¿MutableSet?

¿Tupla con nombre?

¿Secuencia?

¿Establecer?

¿Tamaño?

¿Tamaño?

¿ValoresVer?

__todo__?

__integraciones__?

__doc__?

__archivo__?

__nombre__?

_abcoll?

_itemgetter?

_sys?

defaultdict?

deque?

Además, números El tipo es ABC. Para más información sobre estos dos puntos, ver PEP 3119 y PEP 3141.

3) ¿Cambiar el nombre del método next() del iterador a __next__() y agregar la función incorporada next() para llamar al método __next__() del iterador?

4) ¿Lo haría? ¿Sería más conveniente escribir métodos abstractos (propiedades) agregando dos decoradores @abstractmethod y @abstractproperty?

7. ¿Anormal?

1) Entonces, ¿la excepción hereda de BaseException y elimina StardardError?

2) ¿Eliminar el comportamiento de secuencia y el atributo .message de la clase de excepción?

3) ¿Reemplazar la excepción de aumento, sintaxis de argumentos con excepción de aumento (args)?

4) Cambie la sintaxis para detectar excepciones e introduzca palabras clave en Py2.5 para identificar instancias de excepción:?

>>> try:?

. .. generar NotImplementedError('Error')?

... excepto NotImplementedError, error:

... imprimir error.message

.. . ?

¿Error?

En Py3.0:?

>>> intentar:?

* generar NotImplementedError('Error')?

excepto NotImplementedError como error:

? print(str(error))?

¿Error

5) Dado que __context__ no está implementado en la versión 3.0a1, también lo está ¿Hay una cadena anormal?

8. ¿Cambios de módulo?

1) El módulo cPickle ha sido eliminado y puede ser reemplazado por el módulo pickle. Finalmente tendremos un módulo transparente y eficiente.

2) ¿Eliminar el módulo imageop?

3) Eliminar audiodev, Bastion, bsddb185, excepción, linuxaudiodev, md5, MimeWriter, mimify, popen2, ?

rexec, set, sha, stringold, strop, sunaudiodev, timing y módulo xmllib?

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

5) ¿Eliminar nuevo módulo?

6) ¿Se moverán las funciones os.tmpnam() y os.tmpfile() al módulo tmpfile?

7) El módulo tokenize ahora puede funcionar con bytes. ¿El punto de entrada principal ya no es generate_tokens sino tokenize.tokenize()?

9.

1) xrange() pasa a llamarse range(). Para usar range() para obtener una lista, debes llamar explícitamente: ?

>>> list(range(10). ))?

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

2) Los objetos de bytes no se pueden aplicar hash, y b. lower no es compatible con los métodos (), b.strip() y b.split(), pero para los dos últimos puedes usar b.strip(b'?).

\n\tr \f') y b.split(b'' ') ¿tienen el mismo propósito?

3) zip(), map() y filter() devuelven iteradores. Además, se han eliminado las funciones apply(), callable(), coerce(), execfile(), reduce() y reload?

().

hasattr() puede ahora se puede utilizar Reemplazar invocable(). La sintaxis de hasattr() es la siguiente: hasattr(string, '__name__')

4) string.letter y las mayúsculas y minúsculas relacionadas se han eliminado. Utilice funciones como string.ascii_letters en su lugar. ?

5) Si los valores de x < y no se pueden comparar, ¿se generará una excepción TypeError?

6) El miembro de la familia __getslice__ ha quedado obsoleto. a[i:j] se convertirá en a.__getitem__(slice(I, j)) o __setitem__ según el contexto.

¿__delitem__ llamar?

7) En Py2.5, la clase de archivo ha quedado obsoleta: ?

>>> archivo?

?< / p>

En Py3.X: ?

>>> archivo?

Rastreo (última llamada más reciente):?

archivo" ", línea 1, en el archivo ?

?

NameError: el nombre 'archivo' no está definido.