Las innovaciones más interesantes:
- Expresión de tarea:
El nuevo operador := le permite asignar valores a variables dentro de expresiones. Por ejemplo:
si (n := len(a)) > 10:
print(f"La lista es demasiado larga ({n} elementos, esperado <= 10)") - Argumentos únicamente posicionales:
Ahora puede especificar qué parámetros de función se pueden pasar a través de la sintaxis de argumentos con nombre y cuáles no. Ejemplo:
def f(a, b, /, c, d, *, e, f):
imprimir(a,b,c,d,e,f)f(10, 20, 30, d=40, e=50, f=60) # Aceptar
f(10, b=20, c=30, d=40, e=50, f=60) # error, `b` no puede ser un argumento con nombre
f(10, 20, 30, 40, 50, f=60) # error, `e` debe ser un argumento con nombreEste cambio ofrece a los desarrolladores una forma de proteger a los usuarios de sus API de cambios en los nombres de los argumentos de las funciones.
- Admite f-strings = para expresiones autodocumentadas y depuración:
Se agregó azúcar para simplificar los mensajes de depuración/registro.
n = 42
print(f'Hola mundo {n=}.')
# imprimirá "Hola mundo n=42". - Se corrigió la palabra clave continuar en el bloque finalmente (no funcionó antes).
Otro:
- Puede especificar explícitamente la ruta al caché de código de bytes en lugar del __pycache__ predeterminado.
- Las compilaciones de depuración y versión utilizan la misma ABI.
Fuente: linux.org.ru