Novidades mais interessantes:
- Expressão de atribuição:
O novo operador := permite atribuir valores a variáveis dentro de expressões. Por exemplo:
if (n := len(a)) > 10:
print(f"A lista é muito longa ({n} elementos, esperado <= 10)") - Argumentos apenas posicionais:
Agora é possível indicar quais parâmetros das funções podem ser passados usando a sintaxe de argumentos nomeados, e quais não. Exemplo:
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) # 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 dá aos desenvolvedores uma forma de proteger os usuários de suas APIs contra alterações nos nomes dos argumentos das funções.
- Suporte a f-strings = para expressões auto-documentadas e depuração:
Adicionado açúcar para facilitar mensagens de depuração/log.
n = 42
print(f'Hello world {n=}.')
# напечатает "Hello world n=42." - Corrigida a palavra-chave continue em um bloco finally (anteriormente não funcionava).
Outras:
- Agora é possível especificar explicitamente o caminho para o cache de bytecode, em vez do padrão __pycache__.
- As compilações Debug e Release usam o mesmo ABI.
Fonte: linux.org.ru
