= Intro = Apesar do Python 2.x ser a versão da vez, com seus módulos e conceitos novos, muitas máquinas ainda rodam o bom e velho Python versão 1.5. Quer um exemplo? O [[http://sf.net|SourceForge]], nas contas shell para projetos usava o Python 1.5 até meados de 2003. Outro motivo forte para usar a versão antig é se o seu programa faz uso intensivo de [[http://guia-er.sf.net|Expressões Regulares]]. Devido a mudanças grandes no módulos, a versão 1.5.2 é muito, mas muito mais rápida que qualquer 2.. Num teste de performance que estressa bastante o módulo '''re''', a diferença foi de '''12 segundos''' para quase '''2 minutos'''! (Vide thread "python 1.5 VS python 2.2" na lista de discussão python-brasil) Como muitas mudanças introduzidas nas versões novas '''quebraram compatibilidade''' com a versão 1.5, este artigo visa ensinar a prática da programação "conservadora", utilizando estruturas e sintaxe que funcionam tanto na versão antiga quanto na nova do Python. Não perca usuáros, programe legal! Para reforçar, uma mensagem que recebi do amigo Rubens Queiroz: {{{ Voce viu minha mensagem sobre o laptop 486? Então, eu fiquei com medo do txt2tags nao rodar la, pois é um slack 7.0 e python 1.5. Fiquei super feliz de voce manter a compatibilidade a partir desta versão. Estou me divertindo com o laptop, txt2tags (que esta ficando cada vez melhor). }}} = Módulo String = Não use os métodos de string diretamente pela variável, como em: {{{ >>> texto = "Oi, tudo bem?" >>> print texto.upper() OI, TUDO BEM? }}} Ao invés disso, importe o módulo {{{string}}} e use seus métodos: {{{ >>> import string >>> texto = "Oi, tudo bem?" >>> print string.upper(texto) OI, TUDO BEM? }}} = Atalhos para operações aritméticas = Não use os atalhos de operações como {{{+=}}}, {{{-=}}} e amigos. O famoso {{{i+=1}}} é inválido no Python 1.5. {{{ >>> i = 1 >>> i+= 1 File "", line 1 i+= 1 ^ SyntaxError: invalid syntax }}} Seja conservador e use a sintaxe normal: {{{ >>> i = 1 >>> i = i + 1 >>> i 2 }}} = self.METODO em lambda = Não use variáveis ou métodos da instância da classe (self.NOME) em funções anônimas (lambda). Elas não fazem parte do escopo no Python 1.5! {{{>>> minhalista = map( lambda tmpvar: self.parse_var(tmpvar), minhalista )}}} No exemplo, o método {{{self.parse_var}}} não é reconhecido por {{{lambda}}}. A solução é não usar o lambda :( Use o {{{for}}} tradicional: {{{ listatmp = [] for item in minhalista: listatmp.append(self.parse_var(item)) minhalista = listatmp[:] del listatmp }}} = Pouco né? = Não é muita coisa. São pequenos detalhes na hora de programar que depois podem fazer a diferença se o usuário vai poder rodar o seu programa ou vai te xingar por tentar fazê-lo baixar muitos megas da versão nova do Python. :) ---- Aurélio Marinho Jargas http://aurelio.net