sexta-feira, 7 de maio de 2021

O que há de novo em “Dive Into Python 3”

Não é aqui que entramos?
- Pink Floyd, The Wall

também conhecido como “o nível negativo”

Você já é um programador Python? Você leu o “Dive Into Python” original? Você comprou no papel? (Em caso afirmativo, obrigado!) Você está pronto para mergulhar no Python 3? … Se sim, continue lendo. (Se nada disso for verdade, seria melhor começar do início).

Python 3 vem com um script chamado 2to3. Aprenda. Adore. Use-o. Portar código para Python 3 com 2to3 é uma referência de todas as coisas que a ferramenta 2to3 pode consertar automaticamente. Uma vez que muitas dessas coisas são mudanças da sintaxe, é um bom ponto de partida para aprender sobre um monte de mudanças de sintaxe em Python 3. (print agora é uma função, `x` não funciona, & c.).

Estudo de caso: Portar chardet para Python 3 documenta meu esforço (finalmente bem-sucedido) para portar uma biblioteca não trivial de Python 2 para Python 3. Isso pode ajudá-lo; pode não ser. Há uma curva de aprendizado bastante íngreme, já que você precisa entender a biblioteca primeiro, para que possa entender por que ela quebrou e como eu consertei. Muitas das rupturas giram em torno das strings. Falando nisso…

Strings. Uau. Onde começar. Python 2 tinha “strings” e “strings Unicode”. Python 3 tem “bytes” e “strings”. Ou seja, todas as strings são agora strings Unicode e, se você quiser lidar com um pacote de bytes, use o novo tipo bytes. O Python 3 nunca converterá implicitamente entre strings e bytes, portanto, se você não tiver certeza de qual possui em um determinado momento, seu código quase certamente falhará. Leia o capítulo Strings para mais detalhes.

Bytes vs. strings surge repetidamente ao longo do livro.

  • Em Arquivos, você aprenderá a diferença entre ler arquivos nos modos “binário” e “texto”. Ler (e gravar!) Arquivos em modo de texto requer um parâmetro encoding. Alguns métodos de arquivo de texto contam caracteres, mas outros métodos contam bytes. Se o seu código assume que um caractere é igual a um byte, ele será interrompido em caracteres multibyte.
  • Em HTTP Web Services, o módulo httplib2 busca cabeçalhos e dados em HTTP. Os cabeçalhos HTTP são retornados como strings, mas o corpo HTTP é retornado como bytes.
  • Em Serializando objetos Python, você aprenderá por que o módulo pickle em Python 3 define um novo formato de dados que é incompatível com versões anteriores do Python 2. (Dica: é por causa de bytes e strings.) Além disso, Python 3 oferece suporte à serialização de objetos de e para JSON, que nem mesmo tem um tipo bytes. Vou te mostrar como contornar isso.
  • No estudo de caso: portar chardet para Python 3, é apenas uma confusão sangrenta de bytes e strings em todos os lugares.

Mesmo que você não se importe com o Unicode (ah, mas você se importará), você vai querer ler sobre a formatação de strings no Python 3, que é completamente diferente do Python 2.

Os iteradores estão por toda parte no Python 3 e eu os entendo muito melhor do que há cinco anos, quando escrevi “Dive Into Python”. Você precisa entendê-los também, porque muitas funções que costumavam retornar listas no Python 2 agora retornarão iteradores no Python 3. No mínimo, você deve ler a segunda metade do capítulo Iteradores e a segunda metade do capítulo Iteradores avançados.

Por solicitação popular, adicionei um apêndice sobre nomes de métodos especiais, que é parecido com o capítulo “Modelo de dados” da documentação do Python, mas com mais detalhes.

Quando eu estava escrevendo “Dive Into Python”, todas as bibliotecas XML disponíveis eram péssimas. Então Fredrik Lundh escreveu ElementTree, que não é nada. Os deuses do Python sabiamente incorporaram ElementTree à biblioteca padrão e agora ele forma a base para meu novo capítulo XML. As velhas maneiras de analisar XML ainda existem, mas você deve evitá-las, porque elas são uma merda!

Outra novidade em Python - não na linguagem, mas na comunidade - é o surgimento de repositórios de código como o Python Package Index (PyPI). Python vem com utilitários para empacotar seu código em formatos padrão e distribuir esses pacotes no PyPI. Leia Empacotamento de bibliotecas Python para obter detalhes.

Esse artigo é uma tradução de um capítulo do livro "Dive Into Python 3" escrito por Mark Pilgrim.

Traduzido por Acervo Lima. O original pode ser acessado aqui.

Licença

0 comentários:

Postar um comentário