Após um ano e meio de desenvolvimento apresentado lançamento de linguagem de programação principal Python 3.8. Atualizações corretivas para o branch Python 3.8 planejado lançamento em 18 meses. Vulnerabilidades críticas serão corrigidas por 5 anos até outubro de 2024. Atualizações corretivas para o branch 3.8 serão lançadas a cada dois meses, com o primeiro lançamento corretivo do Python 3.8.1 agendado para dezembro.
apoio operações de atribuição em expressões complexas. Com o novo operador “:=”, é possível realizar operações de atribuição de valores dentro de outras expressões, por exemplo, para evitar chamadas duplas de função em instruções condicionais e ao definir loops:
se (n := len(a)) > 10:
...
while (bloco := f.read(256)) != ":
...
apoio nova sintaxe para especificar argumentos de função. Ao enumerar argumentos durante uma definição de função, agora você pode especificar um "/" para separar argumentos que só podem receber valores com base na ordem em que os valores são enumerados durante a chamada de função, de argumentos que podem ser atribuídos em qualquer ordem (sintaxe variável = valor)). Do lado prático, o novo recurso permite que funções em Python emulem completamente o comportamento de funções existentes em C e também evitem vinculação a nomes específicos, por exemplo, se o nome do parâmetro for planejado para ser alterado no futuro.
O sinalizador “/” complementa o sinalizador “*” adicionado anteriormente, separando variáveis para as quais apenas uma atribuição na forma “variável=valor” é aplicável. Por exemplo, na função "def f(a, b, /, c, d, *, e, f):" as variáveis "a" e "b" só podem ser atribuídas na ordem em que os valores são listados ,
variáveis “e” e “f”, somente através da atribuição “variável=valor”, e variáveis “c” e “d” em qualquer uma das seguintes formas:
Adicionado nova API C
para configurar os parâmetros de inicialização do Python, permitindo controle completo sobre todos configuração e fornecendo recursos avançados de tratamento de erros. A API proposta facilita a incorporação da funcionalidade do interpretador Python em outros aplicativos C;
Implementado novo protocolo Vectorcall para acesso mais rápido a objetos escritos em linguagem C. No CPython 3.8, o acesso ao Vectorcall ainda está limitado ao uso interno, a transferência para a categoria de APIs acessíveis ao público está planejada no CPython 3.9;
Adicionado chamadas para Runtime Audit Hooks, que fornecem aplicativos e frameworks em Python com acesso a informações de baixo nível sobre o progresso do script para auditar as ações executadas (por exemplo, você pode rastrear a importação de módulos, abrir arquivos, usar um rastreamento, acessando soquetes de rede, executando código através de exec, eval e run_mod);
No módulo salmourafornecido suporte para o protocolo Pickle 5, usado para serializar e desserializar objetos. Pickle permite otimizar a transferência de grandes quantidades de dados entre processos Python em configurações de vários núcleos e vários nós, reduzindo o número de operações de cópia de memória e aplicando técnicas de otimização adicionais, como o uso de algoritmos de compactação específicos de dados. A quinta versão do protocolo é notável pela adição de um modo de transmissão fora de banda, no qual os dados podem ser transmitidos separadamente do fluxo principal de pickle.
Por padrão, está ativada a quarta versão do protocolo Pickle, que, em comparação com a terceira versão oferecida anteriormente por padrão, permite maior desempenho e redução no tamanho dos dados transmitidos;
No módulo digitando Vários novos recursos são introduzidos:
Classe DigitadoDict para matrizes associativas nas quais as informações de tipo são especificadas explicitamente para os dados associados às chaves (“TypedDict('Point2D', x=int, y=int, label=str)”).
tipo Literal, que permite limitar um parâmetro ou valor de retorno a alguns valores predefinidos (“Literal['conectado', 'desconectado']”).
Construção "final", que permite definir os valores de variáveis, funções, métodos e classes que não podem ser alterados ou reatribuídos ("pi: Final[float] = 3.1415926536").
Adicionada a capacidade de atribuir um cache para arquivos compilados com bytecode, salvos em uma árvore FS separada e separados dos diretórios com o código. O caminho para salvar arquivos com bytecode é definido por meio de uma variável PYTHONPYCACHEPREFIX ou a opção "-X pycache_prefix";
Implementado a capacidade de criar compilações de depuração do Python que usam uma ABI idêntica ao lançamento, o que permite carregar extensões escritas em linguagem SI, compiladas para versões estáveis, em compilações de depuração;
strings f (literais formatados prefixados com 'f') fornecem suporte para o operador = (por exemplo, "f'{expr=}'"), que permite converter uma expressão em texto para facilitar a depuração. Por exemplo: