6 de dezembro de 2008

Python 3000, Python 3.0 e Py3K


Não importa qual dos três nomes você escolha. Todos eles se referem à mais nova versão majoritária (estável) da linguagem Python, disponível para uso desde 3 de dezembro de 2008. A escolha por uma versão majoritária (3.0) se deve à várias mudanças bruscas que foram feitas na sintaxe da linguagem e em sua API (Application Programming Interface), o que quebra alguns elos de compatibilidade com versões anteriores (i.e., série 2.x).

De fato, foram muitas mudanças, tantas que a série de PEPs numerados entre 3000 e 3099 foram designadas apenas para descrever funcionalidades da nova versão da linguagem. Além disso, a documentação do Py3K vem com uma seção especial chamada What's New In Python 3.0, que mostra os aspectos em que a nova versão difere das anteriores. Com base nisso e em pequenos testes que fiz na nova versão, resolvi escrever este texto para mostrar ao leitor alguns pontos importantes de mudança.

1. print tornou-se uma função. Isso mesmo! Se você tentar usar o modo antigo do print no Py3K, vai resultar num erro como o mostrado abaixo:
>>> print "http://versaopropria.blogspot.com"
SyntaxError: invalid syntax (<pyshell#0>, line 1)
>>>

Agora o uso de print deve ser feito como para qualquer função: print(). Particularmente, eu achei muito interessante esta mudança, visto que o comando ficou mais poderoso. Exemplos:
>>> print("http://versaopropria.blogspot.com")
http://versaopropria.blogspot.com
>>>
>>> print("Calculando...", 1 + 1)
Calculando... 2
>>>
>>> print("Evitando a quebra de linha.", end=' '); print("A quebra foi substituída por um espaço!")
Evitando a quebra de linha. A quebra foi substituída por um espaço!
>>>
>>> print()  # Uma linha em branco.

>>>
>>> address = "http://versaopropria.blogspot.com"
>>>
>>> print("Salve", address, "nos seus favoritos! :D")
Salve http://versaopropria.blogspot.com nos seus favoritos! :D
>>>

2. range() se comporta agora como xrange(). O segundo não existe mais! A diferença entre os dois era que, enquanto o primeiro criava uma lista completa a partir dos valores passados, o segundo criava a lista apenas quando os valores eram acessados, o que poupava memória quando a lista não estava em uso.

3. A divisão com uma barra simples retorna float. Use barra dupla para que um inteiro seja retornado.
>>> 1 / 7
0.14285714285714285
>>> 1 // 7
0
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3
>>>

4. Finalmente UTF-8! Não existe mais a necessidade de se indicar ao interpretador que você vai usar UTF-8. Isso agora é padrão. Só lembre de não abusar! Tenha sempre o PEP8 em mente!

5. as, with, True e False agora são palavras reservadas da linguagem.

6. Agora existe apenas um sinal de diferente: !=. <> foi removido.

7. Uma nova forma de se formatar Strings. Como strings em Python são objetos, foi criado um método chamado format() para substituir o uso do caractere de módulo. Embora na versão 3.0 ainda seja possível uma construção como:
>>> "Meu blog é: %s." % "http://versaopropria.blogspot.com"
Meu blog é: http://versaopropria.blogspot.com.
>>>

Esta forma será abandonada na versão 3.1 da linguagem, o que é um incentivo para que não seja mais usada. O mesmo código poderia ser reescrito com o uso do método format():
>>> "Meu blog é: {0}.".format("http://versaopropria.blogspot.com")
Meu blog é: http://versaopropria.blogspot.com.
>>>

Para quem não entendeu, o novo método funciona basicamente como o anterior, mas em vez de você marcar onde vai ser um float, inteiro ou string, você apenas define onde entrarão o primeiro, segundo e enésimo valores, definidos na própria string, de {0} a {n}. Então você precisa suceder a string com .format() e adicionar, como parâmetros para o método, os valores que deverão ser substituídos na string.

Obviamente esta é apenas a ponta do iceberg, maiores informações podem ser obtidas na página do PEP3101, que é o que define o funcionamento deste novo ambiente.

Pelo pouco que pude perceber da nova versão de Python, a linguagem evoluiu bastante, mesmo que isso tenha custado a perda de compatibilidade com as versões anteriores. Ao meu ver, essa perda de compatibilidade é necessária para que antigas decisões que não se mostraram muito boas, possam ser corrigidas. Minha única crítica fica para o time de desenvolvimento que lançou apenas o instalador para o Windows. Ignoraram Esqueceram os usuários de OS X e Linux! Podiam ter, ao menos, trabalhado em conjunto com a Apple e com a Canonical, para lançar simultaneamente versões para Mac e Ubuntu...

Com o tempo, postarei aqui novas mudanças que eu encontrar. E você? Encontrou alguma mudança para sua forma de programar em Python? Achou as mudanças boas ou ruins? Comente!



Leia Também

2 comentários:

  1. Fala brother!!!

    Excelente artigo mano.

    Não tive contato ainda com essa versão embora já tenha lido algo. As questões de tranformar print e outras em função, para o programadores em C, só tem a acrescentar pois parece mais com a linguagem progenitora.

    O interessante da evolução da linguagem é fato de não ser jogado as mudanças de uma hora para outra, por exemplo, a questão da divisão, salvo engano, está disponível deste a versão 2.5 ou 2.6.

    Kra agora do tendo que aprender a C++, a melhor pra mim foi qdo vc me indicou a aprender C, valeu mesmo.

    abraço.

    ResponderExcluir
  2. Salve!
    Com certeza, o planejamento foi muito bom! Mas não podia deixar de ser. Imagine trocar a sintaxe da linguagem, depois de milhares de pessoas estarem familiarizadas com ela? Ponto para o time de desenvolvimento!
    Gostei das melhorias! Você também gostou? Ponto para a linguagem e ponto para os usuários (programadores)!
    Já li algumas reclamações sobre suporte a programação funcional, que não foi melhorada, mas como não uso, não tenho como avaliar. Segundo o que li, criticaram pelo fato de funções como lambda() não terem sido melhoradas.
    Com certeza a linguagem C é a melhor que se tem para aprender a programar. Além de doutrinar o programador, é um trampolim para outras tantas linguagens! A melhor coisa que fiz, foi correr atrás para aprendê-la! ;)
    Agora, já que vai aprender C++, fica a sugestão de uma série de artigos no seu blog sobre esse processo!
    []!

    ResponderExcluir