O documento discute a migração para o Python 3, destacando que é o presente e futuro da linguagem. Apresenta algumas mudanças na sintaxe e funcionalidades entre as versões 2 e 3, como divisão consistente, Unicode como padrão e novas bibliotecas como AsyncIO e Pathlib. Conclui enfatizando a importância de migrar códigos para aproveitar melhorias e consistência na linguagem.
1. Python 3 e o futuro da
linguagem
Ou: por favor, migre o seu código!
2. Lançamento do Python 3
• Primeira versão da linha 3 (3.0) foi lançada oficialmente em
3 de dezembro de 2008, quase 9 anos atrás. O Python 2.7
incorporou algumas das mudanças em seu lançamento
em 2010.
• Foco principal da atualização da linha do Python 3 é “deve
haver uma — e preferivelmente apenas uma — maneira
óbvia de fazê-lo” (the Zen of Python). Bibliotecas foram
agregadas, excluídas, movidas…
• Foi criado o Python Wall of Shame para listar os módulos
mais usados na comunidade que ainda não haviam sido
portados.
3. Python 3.0 — 3.7
• A linha 3 do Python é o presente e o futuro
próximo da linguagem.
• Os próximos slides mostram algumas mudanças
na linguagem em relação ao Python 2, e, em
seguida, coisas que realmente não existem no
Python 2, e provavelmente nunca existirão.
• O primeiro alfa do Python 3.7 (3.7.0a0) está no
forno…
4. Python 2 x Python 3
Comparações consistentes
• No Python 2:
• 'a' > 10 # Retorna True
• No Python 3:
• 'a' > 10 # TypeError
5. Python 2 x Python 3
Unicode como padrão
• Mudança mais radical na linguagem, que exige
maior parte de refatoração de código.
• Hoje o mundo é unicode.
6. Python 2 x Python 3
Divisão consistente
• No Python 2:
• 3 / 2 # Retorna 1
• No Python 3:
• 3 / 2 # Retorna 1.5
7. Python 2 x Python 3
Inteiros. Apenas isso
• A diferença entre “integer” e “long” foi
internalizada na linguagem. O interpretador
decide quando vai usar um e quando vai usar o
outro. Número inteiro é número inteiro.
8. Python 2 x Python 3
Consistências na linguagem
• Todas as classes passam a ser forçadamente
new-style classes, que foram introduzidas no
Python 2.2. Old-style classes não existem mais
(de certo modo).
• range() e métodos de dicionário retornam um
iterável ao invés de uma lista, o que pode ser
muito mais eficiente em relação a uso de
memória.
11. Argumentos protegidos
def farofa(ing_a, ing_b, *, temperada=False)
A única maneira de enviar o “temperada" é através de chamada
explícita farofa(1, 2, temperada=True)
12. AsyncIO (3.4)
• Forma performática de se trabalhar com código
assíncrono. Diferentemente de multi-threading
(através, por exemplo da biblioteca threading),
o controle de contexto é inteiramente feito na
construção das funções.
• Leitura altamente recomendada
• https://hackernoon.com/asynchronous-python-45df84b82434
14. functools.lru_cache (3.2)
• Decorator para memoização de retornos de
métodos.
• Provê um cache least recently used em
biblioteca nativa, builtin, através de um
decorator. Sintaxe extremamente simples.
16. faulthandler (3.3)
• Permite que o traceback do código que está
sendo executado seja apresentado
explicitamente, quando ocorre um erro ou ao
enviar um sinal direto ao processo.
• Como é implementado em C, pode ser utilizado
para capturar tracebacks inclusive em
segmentation faults ou em deadlocks. Útil
principalmente quando se está desenvolvendo
usando ctypes.