Novedades más interesantes:
- Expresión de asignación:
El nuevo operador := permite asignar valores a variables dentro de expresiones. Por ejemplo:
if (n := len(a)) > 10:
print(f"La lista es demasiado larga ({n} elementos, se esperaba <= 10)") - Argumentos solo posicionales:
Ahora se puede especificar qué parámetros de las funciones se pueden pasar mediante la sintaxis de argumentos nombrados y cuáles no. Ejemplo:
def f(a, b, \/, c, d, *, e, f):
print(a, b, c, d, e, f)f(10, 20, 30, d=40, e=50, f=60) # OK
f(10, b=20, c=30, d=40, e=50, f=60) # error, `b` no puede ser un argumento nombrado
f(10, 20, 30, 40, 50, f=60) # error, `e` debe ser un argumento nombradoEste cambio ofrece a los desarrolladores una manera de proteger a los usuarios de sus API de cambios en los nombres de los argumentos de las funciones.
- Soporte para f-strings = para expresiones autodocumentadas y depuración:
Se ha agregado azúcar para simplificar los mensajes de depuración/logging.
n = 42
print(f’Hola mundo {n=}.’)
# напечатает "Hello world n=42." - Se ha corregido la palabra clave continue en el bloque finally (anteriormente no funcionaba).
Otros:
- Se puede especificar explícitamente la ruta del caché de bytecode en lugar del predeterminado __pycache__.
- Las compilaciones Debug y Release utilizan el mismo ABI.
Fuente: linux.org.ru
