Embora o Python tenha completado 30 anos em 2021, a explosão de adoção, crescimento e desenvolvimento com visão de futuro associada à linguagem ainda é relativamente nova. Muitos recursos do Python permaneceram inalterados desde o seu início, mas a cada ano que passa e a cada nova edição do Python, surgem novas maneiras de fazer as coisas e novas bibliotecas que aproveitam esses avanços.
Portanto, Python tem seus métodos antigos e seus novos. Naturalmente, faz sentido aprender como trabalhar com Python usando seus recursos mais modernos e convenientes. Aqui, analisaremos os principais conceitos que você precisa entender para escrever moderno Python em 2024 – software que usa os melhores e mais recentes idiomas, conceitos e recursos do Python.
Digite dicas em Python
A sintaxe de dicas de tipo introduzida recentemente no Python permite que linters e ferramentas de qualidade de código de terceiros analisem seu código antes do tempo de execução e detectem possíveis erros antes que eles apareçam. Quanto mais você criar código Python para compartilhar com outras pessoas, maior será a probabilidade de você (e todos os outros!) se beneficiarem do uso de dicas de tipo.
Cada revisão sucessiva do Python lança anotações de tipo mais sofisticadas e poderosas. Se você adquirir o hábito de aprender a usar anotações de tipo no curto prazo, estará mais bem equipado para fazer uso de cada nova inovação de dicas de tipo à medida que for introduzida.
É importante lembrar que as dicas de tipo são opcionalnão obrigatório. Nem todo projeto precisa deles. Use dicas de tipo para tornar seus projetos maiores compreensíveis, mas sinta-se à vontade para omiti-las de um script descartável de 50 linhas. E, embora as dicas de tipo não sejam aplicadas em tempo de execução, você pode usar o Pydantic para tornar isso possível. Muitos projetos Python amplamente usados usam extensivamente o Pydantic – FastAPI é um exemplo.
Ambientes virtuais Python e gerenciamento de pacotes
Para projetos simples e trabalhos de desenvolvimento pouco exigentes, muitas vezes você pode usar apenas o recurso integrado do Python venv
ferramenta para manter projetos e seus requisitos separados. Mas os avanços recentes nas ferramentas do Python oferecem mais opções:
- Pyenv: se você precisar manter várias versões do Python instaladas para satisfazer diferentes requisitos do projeto, o Pyenv permite alternar entre elas globalmente ou por projeto. É útil se você estiver trabalhando muito com diferentes edições do Python diretamente na linha de comando, fora do contexto de um ambiente virtual por projeto. Observe que não há suporte oficial para Windows, mas existe uma porta não oficial para Windows.
- Pipenv: Anunciado como “fluxo de trabalho de desenvolvimento Python para humanos”, o Pipenv se destina a gerenciar um ambiente virtual mais todas as dependências do seu projeto. Ele também garante que as dependências sejam determinístico, o que significa que você obtém as versões específicas desejadas e que elas funcionam na combinação solicitada. No entanto, o Pipenv não fala sobre empacotamento de nenhuma forma, portanto não é ideal para projetos que você deseja enviar para o PyPI ou compartilhar com outras pessoas.
- Poesia: Expandindo o conjunto de ferramentas do Pipenv, o Poetry não apenas gerencia projetos e requisitos, mas também facilita a implantação do projeto no PyPI. Ele também gerencia ambientes virtuais separados dos diretórios do projeto.
- PDM: PDM (abreviação de Python Development Master) é um projeto recente e de ponta nesse sentido. Assim como Poetry e Pipenv, o PDM fornece uma interface única para configurar um projeto, gerenciar suas dependências e construir artefatos de distribuição a partir dele. O PDM também usa o padrão PEP 582 para armazenar pacotes localmente em um projeto, portanto não há necessidade de criar ambientes virtuais por projeto. Mas esta ferramenta é relativamente nova, portanto certifique-se de que funciona provisoriamente antes de adotá-la na produção.
- Escotilha: O projeto hatch não apenas lida com a configuração e gerenciamento do projeto, mas também fornece um sistema de construção, ferramentas para empacotar projetos para redistribuição em PyPI, manipulação de testes e muitas outras funções úteis.
- UV: O projeto experimental UV foi escrito pelas mesmas pessoas que fazem o
ruff
Ferramenta de linting Python. Tem como objetivo substituirpip
,venv
e várias outras ferramentas Python de linha de comando ao mesmo tempo. Está escrito em Rust para velocidade (comoruff
), e muitos de seus comandos se assemelham aos depip
e outras ferramentas que ele substitui, tornando-o relativamente fácil de aprender.
Ao criar novos projetos que devem ser trabalhados em um ambiente de equipe ou distribuídos para outras pessoas (por exemplo, via PyPI), certifique-se de usar o formato pyproject.toml moderno para seus requisitos e configuração do projeto, juntamente com o layout do projeto usado com isto. Você ainda pode usar o mais antigo requirements.txt
arquivo lado a lado com pyproject.toml
mas o último cobre uma gama mais ampla de casos de uso e torna seus projetos compatíveis com versões futuras.
Nova sintaxe Python
A evolução do Python significou muitas novas adições à própria linguagem. As últimas versões do Python adicionaram construções sintáticas úteis que permitem uma programação mais poderosa e sucinta. Embora não sejam obrigatórios, módulos de terceiros mais recentes podem usá-los, por isso vale a pena conhecê-los, pelo menos casualmente.
Três adições recentes de sintaxe são especialmente notáveis.
Correspondência de padrões
A maior adição recente, a correspondência de padrões estruturais, que chegou no Python 3.10, é mais do que apenas “switch/case
para Python”, como às vezes foi descrito. A correspondência de padrões estruturais permite tomar decisões de fluxo de controle com base no conteúdo ou estrutura de objetos. Em suma, é uma forma de combinar com base em tipos ou o formas de tipos (uma lista com um int
e um string
por exemplo) em vez de valores.
O 'operador morsa'
Assim chamado por sua aparência (:=
), o operador walrus, adicionado no Python 3.8, introduz expressões de atribuição, uma forma de atribuir um valor a uma variável e depois aplicar um teste à variável em uma única etapa. Isso torna o código menos detalhado em muitas situações comuns, como verificar o valor de retorno de uma função e, ao mesmo tempo, preservar os resultados.
Parâmetros somente posicionais
Uma pequena, mas útil adição recente à sintaxe do Python, parâmetros somente posicionais, permite indicar quais parâmetros de função deve ser especificados como argumentos posicionais, nunca como argumentos de palavras-chave. Esse recurso geralmente tem como objetivo melhorar a clareza e facilitar o desenvolvimento futuro de uma base de código, objetivos nos quais muitos dos outros novos recursos do Python também se concentram.
Teste Python
Escrever testes para uma base de código é como usar fio dental diariamente: todos concordam que é uma coisa boa, poucos de nós realmente fazem isso e menos ainda o fazem corretamente. As bases de código Python modernas merecem ter suítes de testes, e as ferramentas atuais para testes tornam a criação de suítes de testes mais fácil do que nunca.
Python tem sua própria estrutura de teste integrada, unittest
. Não é ruim por padrão, mas seu design e comportamento estão desatualizados. A estrutura Pytest ganhou destaque como um substituto comum. É mais flexível (você pode declarar testes em qualquer parte do seu código, não apenas em um subconjunto) e requer muito menos texto padronizado. Além disso, o Pytest possui muitos complementos para expandir sua funcionalidade (por exemplo, para testar código assíncrono).
Outro complemento importante aos testes é a cobertura de código, determinando quanto da base de código os testes realmente cobrem. O módulo Coverage cobre isso (como o nome sugere) e o Pytest ainda vem com um plug-in para trabalhar com ele.