¿Cuáles son los problemas que resuelven las nuevas características de Python 3? [cerrado]

18

Las nuevas características de Python 3 dicen:

En su mayoría, arreglamos molestias y verrugas conocidas, y eliminamos muchos restos viejos

Menciona qué es diferente (la solución) pero no por qué (los problemas). No he encontrado cuáles fueron los problemas. ¿Cuáles fueron los problemas que resolvieron las soluciones?

usuario712092
fuente
1
Sin embargo, una verruga que no eliminaron es la razón para tener que pasar 'self' a un método de clase. Falla del tren.
Aparejo

Respuestas:

11

Solo nombraré los que se me ocurran de inmediato.

  • Argumentos de solo palabras clave: Descritos en la justificación de la PEP.
  • nonlocal: Sin esto, los cierres no pueden sobrescribir las variables cerradas. Esta necesidad surge de vez en cuando con decoradores y otras funciones de orden superior. La única solución razonable (sin cambiar la API externa), almacenar cualquier estado mutable que desee en un objeto mutable, es excesivamente feo.
  • Comprensiones de diccionario y conjuntos: Crear diccionarios y conjuntos de una manera similar a las comprensiones de listas es menos bonito y un poco más lento cuando se hace a través de las comprensiones de generador. Nos permite usar estos tipos donde son apropiados, sin costo adicional. Lo mismo ocurre con los literales establecidos, especialmente para las inpruebas (a partir de Python 3.2, estos también están optimizados por el optimizador de mirillas).
  • Los literales octales existían en Python 2, pero la 0777notación es una trampa para aquellos que no están acostumbrados (en otros contextos, agregar un cero inicial no cambia ni el valor ni la base).
  • Los literales binarios son útiles para manipular bits, incluso más que los literales hexadecimales.
  • Los literales de bytes son un síntoma de la distinción forzada entre cadenas unicode y cadenas de bytes, y los literales de cadena son unicode. Estos cambios lo obligan a pensar en la diferencia entre el texto y los datos binarios no interpretados y las codificaciones. Esto es importante porque de lo contrario necesita pruebas exhaustivas (con entradas que los tontos centrados en Europa / América que hablan inglés rara vez piensan) para encontrar errores relacionados con la codificación.
  • except ex, var-> except ex as varcorrige el error común except ValueError, IndexError(debería detectar ambos, pero solo detecta el primero y sobrescribe el nombre IndexErrorcon la excepción detectada).
  • Enumere el alcance de la comprensión: evite contaminar espacios de nombres y permita pensar en ellos en términos de expresiones generadoras.
  • Sintaxis y módulos eliminados: nos acerca a "Debe haber una, y preferiblemente solo una, forma obvia de hacerlo". y evita que las personas con malos tutoriales se apeguen a la vieja y rota forma de arreglar las cosas.

fuente