As inovações mais interessantes:
- Expressão de atribuição:
O novo operador := permite atribuir valores a variáveis dentro de expressões. Por exemplo:
se (n := len(a)) > 10:
print(f"A lista é muito longa ({n} elementos, esperado <= 10)") - Argumentos apenas posicionais:
Agora você pode especificar quais parâmetros de função podem ser passados pela sintaxe do argumento nomeado e quais não podem. Exemplo:
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) #OK
f(10, b=20, c=30, d=40, e=50, f=60) # erro, `b` não pode ser um argumento nomeado
f(10, 20, 30, 40, 50, f=60) # erro, `e` deve ser um argumento nomeadoEssa mudança oferece aos desenvolvedores uma maneira de proteger os usuários de suas APIs contra alterações nos nomes dos argumentos das funções.
- Suporte f-strings = para expressões autodocumentadas e depuração:
Adicionado açúcar para simplificar mensagens de depuração/registro.
n = 42
print(f'Olá mundo {n=}.')
# irá imprimir "Olá mundo n=42." - Corrigida a palavra-chave continue no bloco final (não funcionava antes).
Outro:
- Você pode especificar explicitamente o caminho para o cache de bytecode em vez do __pycache__ padrão.
- As compilações de depuração e versão usam a mesma ABI.
Fonte: linux.org.ru