Category Archives: Python

Python: Adicionar argumentos ao método Bind (wxPython)

O método Bind() no wxPython permite associar métodos a eventos. Por exemplo: Bind(wx.EVT_BUTTON, sys.exit(), id=ID_BUTTON) Ao clicar, o método exit() é disparado. Para permitir que o método disparado receba argumentos, podemos utilizar: botao =  wx.Button(self, -1, “Instalar”) Bind(wx.EVT_BUTTON, lambda event: Metodo(event, … Continue reading

Posted in Python | 2 Comments

Python: Introspeção de atributos e métodos com vars(), locals() e dir()

Para descobrir os atributos de um objeto podemos utilizar: objeto.__dict__ vars(objeto) Para descobrir os atributos de uma classe: vars(Classe()) Se utilizar vars() sem argumentos, funciona como locals(), listando todas as variáveis. Para listar métodos e atributos de um objeto: dir(objeto)

Posted in Python | Tagged , , , | Comments Off on Python: Introspeção de atributos e métodos com vars(), locals() e dir()

Python: Teste condicional e estruturas de dados vazias

Classes que implementam o método __len__, quando testadas com if, este método é invocado. Portanto, para uma lista vazia, o teste falha. x = []; if x: print “OK” # Nao imprime nada Para mudar este comportamento, basta reimplementar o … Continue reading

Posted in Python | Tagged , , , , | 2 Comments

Python: Pegadinhas com += e list.extend()

Palavras-chave: Python, pegadinhas, gotchas, pitfalls, listas, extends Em Python o operador de soma e atribuição += pode ser usado na forma “a += 1” que tem o mesmo significado que a expressão “a = a + 1“. Até aí nada … Continue reading

Posted in Python | 2 Comments

Python: Singleton

Palavras-chave: Python, Design Patterns, Padrões de Projeto, OOP, POO Um Singleton é um dos padrões de projeto descrito no famoso livro “Design Patterns” escrito pela GoF (Gang of Four) e o seu funcionamento é bastante simples: uma classe é chamada … Continue reading

Posted in Python | 6 Comments

Python: Cópia "rasa" de listas

Palavras-chave: Python, listas, cópia, objetos Em Python as variáveis não armazenam os objetos quando atribuímos um valor à elas. Ao invés disso uma variável em Python guarda apenas uma referência para o objeto em questão. Uma prova disto pode ser … Continue reading

Posted in Python | 6 Comments

Python: Desligando o prompt de comandos no Windows

Palavras-chave: Python, command prompt, prompt de comandos, prompt, DOS, Windows Quando executamos um programa “.py” no Windows uma janela de prompt irá aparecer automaticamente para que as eventuais saídas de texto do seu programa sejam enviadas para lá. Mas essa … Continue reading

Posted in Python, Windows | Comments Off on Python: Desligando o prompt de comandos no Windows

Python: Fazer switch/case com dicionários

Palavras-chave: Python, dicionários, switch, case Algumas pessoas reclamam de que Python não possui uma instrução switch/case, que permite executar trechos de código dependendo do valor de uma determinada variável. Python realmente não disponibiliza essa funcionalidade, mas podemos simulá-la utilizando funções … Continue reading

Posted in Python | 5 Comments

Python: Listagem com cores alternadas (zebra)

Palavras-chave: Python, listagem, cores, zebrado, zebra list Em aplicações Web é bastante comum exibir grandes listagens em uma página. Para facilitar a leitura dessas listagens, quase sempre utilizamos do artifício de alternar as cores de fundo das linhas exibidas. O … Continue reading

Posted in Python | 2 Comments

Python: Evitando o excesso de "or" em condicionais

Palavras-chave: Python, or, in, if, while, condicional, pythonico Quem está começando no mundo do desenvolvimento Python e não conhece muito a linguagem, costuma criar cláusulas condicionais muito longas utilizando o operador “or”: if a == “foo” or a == “bar” … Continue reading

Posted in Python | 1 Comment

Python: split() de palavras com "strings protegidas"

Palavras-chave: Python, split, tokenizacão, análise léxica, parser, strings, quotes, aspas O módulo re possui a conveniente função split(), que faz o mesmo que o split() dos strings, mas aceita expressões regulares como separador. Isto pode ser aproveitado para fazer um … Continue reading

Posted in Python | 2 Comments

Python: Documentação e testes

Palavras-chave: testes, unittest, docstring, documentação, testes unitários, rest, docutils Todo desenvolvedor sabe que fazer testes é superimportante e que fazer documentação também é algo que melhora a qualidade de seus produtos. Mas num primeiro momento, fazer testes é trabalhoso e … Continue reading

Posted in Python | 1 Comment

Python: Descobrir qual o diretório do usuário

Palavras-chave: userdir, home, homedrive, homepath, arquivo de configuração Frequentemente precisamos guardar preferências do usuário de nossos programas em algum arquivo de configuração. Em ambientes UNIX/Linux a prática diz que esses arquivos devem ser guardados dentro do diretório $HOME e de … Continue reading

Posted in Python | 1 Comment

Python: Imprimir mensagens de erro (stderr)

Palavras-chave: print, stdin, stdout, stderr, erro, dispositivos, entrada/saída Quando estamos fazendo um programa que roda na linha de comando e precisamos fazer com que esse programa imprima uma mensagem de erro ou alerta, é aconselhável enviar essa mensagem para a … Continue reading

Posted in Python | Comments Off on Python: Imprimir mensagens de erro (stderr)

Python: UTF8 e SQLObject

Palavras-chave: Unicode, utf8, SQLObject, TurboGears, erro UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xc3 in position 50: ordinal not in range(128) Este erro pode ocorrer quando se tenta executar queries que envolvem caracteres Unicode (na query em si ou no resultado) … Continue reading

Posted in Python | Comments Off on Python: UTF8 e SQLObject

Python: Criando pacotes e módulos

Palavras-chave: pacote, módulo, import Criar um módulo em Python é extremamente simples. Basta apenas criar um arquivo .py dentro de algum diretório listado em sys.path. Alguns desenvolvedores também gostariam de fazer pacotes com módulos em Python. Esses pacotes permitiriam que … Continue reading

Posted in Python | 7 Comments

Python: Rastreando chamadas de funções

Palavras-chave: debug, depuração, trace, decorators Essa dica veio de um amigo meu (Ulysses) e foi enviada para a lista de discussões PythonBrasil. É muito comum precisar rastrear as chamadas de funções que ocorrem dentro dos programas, para facilitar nossa vida … Continue reading

Posted in Python | Comments Off on Python: Rastreando chamadas de funções

Python: Importando módulos errados

Palavras-chave: erro, debug, módulos Se acontecer de, durante o desenvolvimento, você dar um import em um módulo Python e por alguma razão inexplicável o módulo que você importou não funciona ou funciona como se fosse uma versão antiga verifique o … Continue reading

Posted in Python | 1 Comment

Python: Declarar a codificação dos fontes (encoding)

Palavras-chave: Python, encoding, iso-8859-1, latin-1, utf-8, unicode, DeprecationWarning Quando você coloca algum caractere acentuado no seu programa, por exemplo “á”, um aviso é mostrado na execução: sys:1: DeprecationWarning: Non-ASCII character ‘\xe1’ in file foo.py on line 3, but no encoding … Continue reading

Posted in Python | 6 Comments

Python: Formatar strings com dicionários (template)

Palavras-chave: strings, formatação, template, dicionário Muitos programadores certamente sabem que a linguagem Python nos permite formatar strings usando os caracteres de formatação comuns à linguagem C. O que talvez poucos saibam é que existe uma “extensão” ao padrão C que … Continue reading

Posted in Python | Comments Off on Python: Formatar strings com dicionários (template)

Python: Iterar sob listas com índices

Palavras-chave: for, iteração, índice O for do Python é bastante conveniente para iterar listas, descartando a necessidade de variáveis de índice auxiliares. No entanto as vezes é necessário iterar uma lista e ter o índice de cada elemento além do … Continue reading

Posted in Python | 2 Comments

Python: Mover arquivo para outro diretório

Palavras-chave: Python, mover, arquivo, diretório, shutil, link No Python, para mover um arquivo para outro diretório basta usar o módulo shutil: import shutil shutil.move(“este-arquivo”, “/tmp”) Informe o nome do arquivo e em seguida qual o diretório de destino. O arquivo … Continue reading

Posted in Python | 8 Comments

Python: HTTP GET e POST com urllib

Palavras-chave: Python, internet, http, urllib, urlopen, urlencode O módulo urllib lhe fornece meios de acessar servidores HTTP por meios de requests GET e POST de maneira direta: Acessando o conteúdo da http://codare.aurelio.net: import urllib f = urllib.urlopen(“http://codare.aurelio.net”) contents = f.read() … Continue reading

Posted in Python | 6 Comments

Python: Concatenação eficiente de strings

Palavras-chave: strings, otimização, concatenação Em Python as strings são imutáveis e por essa razão, quando concatenamos duas delas usando o operador “+” um novo objeto do tipo string é criado e os objetos originais perdem as suas referências. Se não … Continue reading

Posted in Python | 3 Comments

Python: Escapar caracteres especiais em HTML (entities)

Palavras-chave: HTML, escape, escapar, html_escape, htmlspecialchars, htmlentities Funcões rápidas para escapar e desescapar caracteres especiais HTML (<, & etc) from htmlentitydefs import codepoint2name as cp2nm, entitydefs as nm2cp import re def htmlescape(texto): return “”.join([cp2nm.has_key(ord(x)) and “&%s;”%cp2nm[ord(x)] or x for x … Continue reading

Posted in Python | 5 Comments

Python: Código de depuração (debug)

Palavras-chave: debug, depuração, otimização Quando estamos desenvolvendo um programa é muito comum ter que colocar código de depuração nele para facilitar nosso trabalho. Ao mesmo tempo esse tipo de código não deveria ser executado nas mãos de nossos clientes. Alguns … Continue reading

Posted in Python | Comments Off on Python: Código de depuração (debug)