❝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 tipobytes
. 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.
0 comentários:
Postar um comentário