Tecnologia

Do Python 2 ao Python 3 – Guia rápido

Por: Dextra, fevereiro 27, 2020

Python 2 ou Python 3? O que muda de uma versão pra outra? Será que foi só o “print”?
Em 01/01/2020 a versão 2 do Python perdeu oficialmente o suporte. Mesmo assim muitos projetos ainda utilizam essa versão – e vão ficar sem atualizações de segurança. Mas afinal, quais são as mudanças de uma versão pra outra? Vamos elencar as principais e mais comuns:
1 – UTF-8 e Unicode por padrão:
Se você trabalhou com Python 2 conhece esse cabeçalho aqui:

# -*- coding: UTF-8 -*-

Se não colocasse esse negócio no começo do arquivo… era só esperar a falha de codificação ASCII acontecer. E o que muda??? Você não precisa mais desse cabeçalho!!
Na versão 3 do Python, é padrão o UTF-8, então qualquer falha de codificação é por outro motivo (caracter utf-16 por exemplo). Mas você já pode economizar essa linha no seu arquivo. Da mesma forma o prefixo “u” não é mais necessário.
Então o que seria em Python 2:

minha_string = u"essa string é unicode"

Fica assim no Python 3:

minha_string = "essa string é unicode"

2 – Classes não precisam herdar de object:
Outra coisa bem comum pra que trabalhou com Python 2 é adicionar object na definição de cada classe. Porém com o Python 3 as classes já têm as propriedades de object, e isso é dispensável.
Sendo assim, sua classe que antes era assim:

class MinhaClasse(object):
    um_atributo_qualquer = None

Agora fica assim:

class MinhaClasse:
    um_atributo_qualquer = None

3 – Alguns comandos agora são funções:
Você provavelmente já ouviu falar que “só muda que agora o print é função”. Não é bem assim, mas de fato agora o print é uma função e recebe parâmetros.
Exemplo: em Python 2 se você não quisesse quebrar a linha após o print você faria assim:

print "meu texto sem quebra de linha",

Já no Python 3:

print("meu texto sem quebra de linha", end=" ")

Como vantagem, você pode separar o conteúdo de um for por exemplo com um fim de linha customizado:

for x in range(10):
    print(x, end=", ")

Falando nisso:
4 – Não existe mais XRange – range(n) agora é um generator:
Com certeza você já viu exemplos de for dessa forma:

for x in xrange(10):
    print x

Isso da um ganho de performance por que a função range(n) no Python 2 gera uma lista com n elementos, enquanto xrange(n) gera cada item na iteração. No Python 3, range é sempre um generator ou seja, ele não gera uma lista, funcionando da mesma forma que o xrange no Python 2.
Sendo assim, com Python 3 o exemplo ficaria:

for x in range(10):
    print(x)

Ok. Mas como gerar uma lista de n números em Python 3 com range?
Uma vez que range agora é um generator, você precisa “gerar” a lista com ele. Isso é fácil:

lista = list(range(10))
print(lista)

5 – Formatação de Strings – uma menção honrosa:
Essa mudança não é exatamente da versão 2 para a 3 do Python, mas entrou na linguagem a partir da versão 3.6: o prefixo “f” na strings para formatação. Esse formato tem um ganho considerável de performance além de facilitar muito a escrita e visualização. O exemplo que tradicionalmente ficaria assim:

nome = "Luiz"
idade = 32
profissao = "Desenvolvedor Python"
print u"%s tem %d anos e é %s" % (nome, idade, profissao)

Fica assim:

print(f"{nome} tem {idade} anos e é {profissao}")

Bem mais fácil não?
E se quiser receber os dados com input do usuário? Fácil!

nome = input("Nome: ")
idade = input("Idade: ")
profissao = input("Profissão: ")
print(f"{nome} tem {idade} anos e é {profissao}")

Estranhou algo? Pois é, agora a função raw_input do Python 2 é apenas input.
Finalizando:
Há muitos pontos de diferença entre o Python 2 e 3, a migração as vezes não é tão simples. Estes são os pontos mais comuns na minha opinião. Para maiores informações vale a leitura:
https://www.python.org/doc/sunset-python-2/
https://docs.python.org/3/howto/pyporting.html
Se você usa o SimpleHttpServer:
https://docs.python.org/3/library/http.server.html

  • Receba nosso conteúdo em primeira mão.