2009-10-22 12 views
5

http://docs.python.org/3.0/whatsnew/3.0.html dice que las listas cuál es nueva, pero en mi opinión, que sólo muestra diferencias , por lo que tiene ¿Alguien sabe de alguna características completamente nuevas Python, introducidas en la versión 3.x?¿Qué hay de nuevo en Python 3.x?

Para evitar confusiones, definiré una característica completamente nueva como algo que nunca antes se había usado en ningún otro código, algo que uno puede hacer y decir: "¡Oh, brillante!". P.ej. una función para hacer que los alienígenas invadan, etc.

+3

¿cómo definiría la función * completamente nueva *? – SilentGhost

+0

Acabo de agregar un poco, gracias por señalarlo. – Joe

+0

Votación para cerrar como demasiado amplia. –

Respuesta

4

La sección New Syntax enumera, bueno, la nueva sintaxis en Python 3.x. Creo que a veces es discutible si las cosas son nuevas o han cambiado. P.ej. Cadena de excepción (PEP 3134): ¿es una nueva característica o es un cambio en la maquinaria de excepción?

En general, recomiendo mirar todas las PEP incluidas en el documento. Son los principales cambios/nuevas características.

9

Muchas de las características completamente nuevas que se introdujeron en 3.0 también se backported a 2.6, una elección deliberada. Sin embargo, esto no fue práctico en todos los casos, por lo que algunas de las características nuevas se mantuvieron en Python 3: solo.

Cómo funcionan las metaclases, es probablemente la característica nueva más grande. La sintaxis es claramente mejor que 2.* 's __metaclass__ tarea ...:

class X(abase, metaclass=Y): 

pero lo más importante, la nueva sintaxis significa que el compilador sabe la metaclase a utilizar antes de procesar el cuerpo de la clase, por lo que la metaclase puede finalmente influir en la forma en que se procesa el cuerpo de la clase; esto no fue posible en 2.*. Específicamente, el nuevo método __prepare__ de la metaclase puede devolver cualquier asignación grabable, y si es así, se usa en lugar de un dict regular para registrar las asignaciones (y asignar palabras clave como def) realizadas en el cuerpo de la clase. En particular, esto permite que el pedido del cuerpo de clase finalmente se conserve exactamente como está escrito, y también permite que la metaclase, si así lo desea, grabe múltiples asignaciones/definiciones para cualquier nombre en el cuerpo de clase, en lugar de solo la última asignación o definición realizada para ese nombre. Esto amplía enormemente la aplicabilidad de las clases con metaclases personalizadas apropiadas, en comparación con lo que era factible en 2.*.

Otra sintaxis biggie es annotations - vea la PEP que estoy señalando para obtener más detalles. La biblioteca estándar de Python no ofrece semánticas especiales para las anotaciones, pero exactamente debido a que los marcos y herramientas de terceros están facultados para aplicar cualquier semántica que deseen, tareas tales como verificación de tipos para argumentos de funciones están permitidas, aunque no directamente por el biblioteca estándar de Python.

Por supuesto, hay muchos otros (el nuevo concepto de "puntos de vista" encarnada por métodos tales como dict de .keys & C en 3.*, palabra clave-únicos argumentos, mejor secuencia de desembalaje, nonlocal para cierres más potentes, ...), de variando peso, pero todo bastante útil y bien diseñado.

Cuestiones relacionadas