Lançamento da linguagem de programação Python 3.10

Após um ano de desenvolvimento, uma versão significativa da linguagem de programação Python 3.10 foi lançada. Este novo ramo será mantido por um ano e meio, após o qual correções de segurança serão oferecidas por mais três anos e meio.

Simultaneamente, começou a fase de testes alpha do ramo Python 3.11 (de acordo com o novo cronograma de desenvolvimento, o trabalho em um novo ramo começa cinco meses antes do lançamento do ramo anterior, alcançando a fase de alpha até a data do próximo lançamento). O ramo Python 3.11 permanecerá em lançamentos alpha por sete meses, durante os quais novas funcionalidades serão adicionadas e correções de bugs serão realizadas. Depois disso, haverá um período de três meses de testes beta, durante o qual a adição de novas funcionalidades será proibida e toda a atenção será dedicada à correção de erros. Os últimos dois meses antes do lançamento serão dedicados aos candidatos a lançamento, momento em que será feita a estabilização final.

Entre as novidades adicionadas ao Python 3.10:

  • Foram implementados os operadores «match» e «case» para correspondência com padrões, que melhoram a legibilidade do código, simplificam a correspondência de objetos Python arbitrários e aumentam a confiabilidade do código graças à possibilidade de verificação de tipos estáticos aprimorada. A implementação se assemelha muito ao operador «match» disponível nas linguagens Scala, Rust e F#, que compara o resultado da execução da expressão especificada com uma lista de padrões listados nos blocos baseados no operador «case».

    def http_error(status): match status: case 400: return «Bad request» case 401|403|404: return «Not allowed» case 418: return «I’m a teapot» case _: return «Something else»

    É possível desempacotar objetos, tuplas, listas e sequências arbitrárias para vincular variáveis com base nos valores disponíveis. É permitido definir modelos aninhados, usar condições adicionais "if" no modelo, aplicar máscaras ("[x, y, *rest]"), mapear pares chave/valor (por exemplo, {"bandwidth": b, "latency": l} para extrair os valores "bandwidth" e "latency" de um dicionário), extrair submodelos (operador ":=") e usar constantes nomeadas no modelo. Nas classes, é possível configurar o comportamento durante a correspondência com o método "__match__()".

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origem") case Point(0, y): print(f"Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Em outro lugar") case _: print("Não é um ponto") match point: case Point(x, y) if x == y: print(f"Y=X em {x}") case Point(x, y): print(f"Não na diagonal") RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print("Eu vejo vermelho!") case GREEN: print("A grama é verde") case BLUE: print("Estou sentindo blues :(")

  • Foi fornecida a possibilidade de usar parênteses no operador with para distribuir a definição de coleções de gerenciadores de contexto em várias linhas. Inclusive, é permitido deixar uma vírgula após o gerenciador de contexto final no grupo: with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): …
  • Melhorou a informação sobre a localização no código de erros relacionados a chaves de colchete não fechadas e aspas em literais de string. Por exemplo, em vez de informar sobre um erro de sintaxe na construção seguinte devido a uma chave de colchete não fechada, o ponteiro agora destaca a chave de colchete de abertura e informa sobre a ausência do bloco de fechamento. File "example.py", line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: ' ' was never closed

    Mensagens de erro de sintaxe especializadas adicionais foram adicionadas: falta do caractere ‘:’ antes de um bloco e em dicionários, não destacar tuplas entre parênteses, falta de vírgula em listas, indicação de bloco ‘try’ sem ‘except’ e ‘finally’, uso de ‘=’ em vez de ‘==’ em comparações, e indicação de expressões * nas f-strings. Além disso, agora é destacado toda a expressão problemática e não apenas seu início, além de um aviso mais claro sobre o contexto de erros relacionados à formatação incorreta de recuos. >>> def foo(): … if lel: … x = 2 File ‘’, line 3 x = 2 ^ IndentationError: expected an indented block after ‘if’ statement in line 2

    Para erros causados por erros de digitação no nome de atributos e nomes de variáveis em funções, uma recomendação com o nome correto é fornecida. >>> collections.namedtoplo Traceback (most recent call last): File ‘’, line 1, in AttributeError: module ‘collections’ has no attribute ‘namedtoplo’. Did you mean: namedtuple?

  • Para ferramentas de depuração e profiler, foi garantido que eventos de rastreamento indiquem os números de linha exatos do código executado.
  • Foi adicionada a configuração sys.flags.warn_default_encoding para exibir um aviso sobre potenciais erros relacionados ao processamento em TextIOWrapper e na abertura de arquivos com open() em UTF-8 sem a opção explícita ‘encoding="utf-8"‘ (a codificação padrão utilizada é ASCII). Além disso, nesta nova versão, foi incluída a possibilidade de especificar o valor ‘encoding="locale"‘ para definir a codificação com base na localidade atual.
  • No módulo typing, que fornece ferramentas para definir anotações de tipo, foi adicionado um novo operador que permite usar a sintaxe ‘X | Y’ para escolher um dos tipos (tipo X ou tipo Y). def square(number: int | float) -> int | float: return number ** 2 equivalente à construção suportada anteriormente: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • No módulo typing, foi adicionado o operador Concatenate e a variável ParamSpec, que permitem passar informações adicionais para a verificação estática de tipos ao usar Callable. Também foram adicionados valores especiais TypeGuard ao módulo typing para anotar funções de proteção de tipos e TypeAlias para definir explicitamente um alias de tipo. StrCache: TypeAlias = ‘Cache[str]’ # um alias de tipo
  • Na função zip() foi implementado um sinalizador opcional "strict", que verifica se os argumentos iterados têm o mesmo comprimento. >>> list(zip((‘a’, ‘b’, ‘c’), (1, 2, 3), strict=True)) [(‘a’, 1), (‘b’, 2), (‘c’, 3)] >>> list(zip(range(3), [‘fee’, ‘fi’, ‘fo’, ‘fum’], strict=True)) Traceback (most recent call last): … ValueError: zip() argumento 2 é mais longo que o argumento 1
  • Novas funções integradas aiter() e anext() foram propostas, implementando análogos assíncronos às funções iter() e next().
  • A velocidade dos construtores str(), bytes() e bytearray() foi aumentada em 30-40% ao trabalhar com objetos pequenos.
  • O número de operações de importação no módulo runpy foi reduzido. O comando "python3 -m nome_do_módulo" agora é executado em média 1,4 vezes mais rápido devido à redução dos módulos importados de 69 para 51.
  • Na instrução LOAD_ATTR foi implementado um mecanismo de cache de opcodes individuais, que permitiu acelerar o trabalho com atributos comuns em até 36%, e com slots até 44%.
  • Ao compilar o Python com a opção "—enable-optimizations", o modo "-fno-semantic-interposition" agora é ativado, permitindo acelerar o trabalho do interpretador em até 30% em comparação com a compilação com a opção "—enable-shared".
  • Nos módulos hashlib e ssl foi adicionada a supporte para OpenSSL 3.0.0 e a suporte para versões do OpenSSL mais antigas que 1.1.1 foi descontinuada.
  • O antigo parser foi removido, sendo substituído pelo parser PEG (Parsing Expression Grammar) na versão anterior. O módulo formatter foi removido. O parâmetro loop foi removido da API asyncio. Métodos anteriormente declarados obsoletos foram removidos. Funções Py_UNICODE_str*, que manipulavam strings Py_UNICODE*, foram removidas.
  • O módulo distutils foi declarado obsoleto e está programado para remoção no Python 3.12. Recomenda-se o uso dos módulos setuptools, packaging, platform, shutil, subprocess e sysconfig em vez do distutils. A estrutura wstr foi incluída na lista de obsoletos e programada para remoção no PyUnicodeObject.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster