Despois de ano e medio de desenvolvemento presentado versión principal da linguaxe de programación python 3.8. Actualizacións correctivas para a rama de Python 3.8 planifícase liberación nun prazo de 18 meses. As vulnerabilidades críticas arranxaranse durante 5 anos ata outubro de 2024. As actualizacións correctivas para a rama 3.8 publicaranse cada dous meses, sendo a primeira versión correctiva de Python 3.8.1 programada para decembro.
Apoiar operacións de asignación dentro de expresións complexas. Co novo operador “:=", é posible realizar operacións de asignación de valores dentro doutras expresións, por exemplo, para evitar chamadas de funcións dobres en instrucións condicionais e cando se definen bucles:
se (n := len(a)) > 10:
...
while (bloque := f.read(256)) != ":
...
Apoiar nova sintaxe para especificar argumentos de función. Ao enumerar argumentos durante a definición dunha función, agora pode especificar un "/" para separar os argumentos aos que só se lles pode asignar valores en función da orde na que se enumeran os valores durante a chamada da función, dos argumentos que se poden asignar. en calquera orde (sintaxe de variable=valor) ). No lado práctico, a nova característica permite que as funcións en Python emulen completamente o comportamento das funcións existentes en C e tamén eviten vincularse a nomes específicos, por exemplo, se se planea cambiar o nome do parámetro no futuro.
A marca "/" complementa a marca "*" engadida anteriormente, separando as variables para as que só é aplicable unha asignación na forma "variable=valor". Por exemplo, na función "def f(a, b, /, c, d, *, e, f):" as variables "a" e "b" só se poden asignar na orde en que aparecen os valores. ,
variables “e” e “f”, só mediante a asignación “variable=valor” e as variables “c” e “d” de calquera das seguintes formas:
Engadido nova API C
para configurar os parámetros de inicialización de Python, permitindo un control total sobre todo configuración e proporcionar facilidades avanzadas de manexo de erros. A API proposta facilita a incorporación da funcionalidade do intérprete de Python noutras aplicacións C;
Implementado novo protocolo Vectorcall para un acceso máis rápido a obxectos escritos en linguaxe C. En CPython 3.8, o acceso a Vectorcall aínda está limitado ao uso interno; a transferencia á categoría de API de acceso público está prevista en CPython 3.9;
Engadido chamadas a Runtime Audit Hooks, que proporcionan ás aplicacións e frameworks en Python acceso a información de baixo nivel sobre o progreso do script para auditar as accións realizadas (por exemplo, pode realizar un seguimento da importación de módulos, abrir ficheiros, utilizar un rastrexo, etc.). acceder a sockets de rede, executar código a través de exec, eval e run_mod);
No módulo escabecheasegurado soporte para o protocolo Pickle 5, usado para serializar e deserializar obxectos. Pickle permítelle optimizar a transferencia de grandes cantidades de datos entre os procesos de Python en configuracións de varios núcleos e varios nodos, reducindo o número de operacións de copia de memoria e aplicando técnicas de optimización adicionais, como o uso de algoritmos de compresión específicos de datos. A quinta versión do protocolo destaca pola adición dun modo de transmisión fóra de banda, no que os datos poden transmitirse por separado do fluxo principal.
Por defecto, está activada a cuarta versión do protocolo Pickle que, en comparación coa terceira versión ofrecida anteriormente por defecto, permite un maior rendemento e unha redución do tamaño dos datos transmitidos;
No módulo escribindo Introdúcense varias características novas:
Clase Dict escrito para matrices asociativas nas que se especifica explícitamente a información de tipo para os datos asociados ás claves (“TypedDict('Point2D', x=int, y=int, label=str)”).
Tipo Literal, que permite limitar un parámetro ou valor de retorno a uns poucos valores predefinidos ("Literal['conectado', 'desconectado']").
Construción"Final", que permite definir os valores de variables, funcións, métodos e clases que non se poden cambiar ou reasignar ("pi: Final[float] = 3.1415926536").
Engadida a posibilidade de asignar unha caché para ficheiros compilados con bytecode, gardado nunha árbore FS separada e separada dos directorios co código. A ruta para gardar ficheiros con bytecode establécese mediante unha variable PYTHONPYCACHEPREFIX ou a opción "-X pycache_prefix";
Implementado a capacidade de crear compilacións de depuración de Python que usen un ABI idéntico á versión, que lle permite cargar extensións escritas en linguaxe SI, compiladas para versións estables, en compilacións de depuración;
As cadeas f (literais formateados con prefixo 'f') ofrecen soporte para o operador = (por exemplo, "f'{expr=}'"), que lle permite converter unha expresión en texto para facilitar a depuración. Por exemplo: