<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CODARE &#187; Python</title>
	<atom:link href="http://codare.net/category/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://codare.net</link>
	<description>Programadores, uni-vos!</description>
	<lastBuildDate>Fri, 03 Dec 2010 21:34:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Python: Adicionar argumentos ao método Bind (wxPython)</title>
		<link>http://codare.net/2009/09/29/python-adicionar-argumentos-ao-metodo-bind-wxpython/</link>
		<comments>http://codare.net/2009/09/29/python-adicionar-argumentos-ao-metodo-bind-wxpython/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 12:00:01 +0000</pubDate>
		<dc:creator>Lauro Cesar de Oliveira</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://codare.net/?p=519</guid>
		<description><![CDATA[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, &#8230; <a href="http://codare.net/2009/09/29/python-adicionar-argumentos-ao-metodo-bind-wxpython/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O método Bind() no wxPython permite associar métodos a eventos. Por exemplo:</p>
<pre>Bind(wx.EVT_BUTTON, sys.exit(), id=ID_BUTTON)</pre>
<p>Ao clicar, o método exit() é disparado.</p>
<p>Para permitir que o método disparado receba argumentos, podemos utilizar:</p>
<pre>botao =  wx.Button(self, -1, "Instalar")

Bind(wx.EVT_BUTTON, lambda event: Metodo(event, 'argumento'), botao)

def Metodo(self, argumento):
    print argumento</pre>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/09/29/python-adicionar-argumentos-ao-metodo-bind-wxpython/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Python: Introspeção de atributos e métodos com vars(), locals() e dir()</title>
		<link>http://codare.net/2009/09/25/python-introspecao-de-atributos-e-metodos-com-vars-locals-e-dir/</link>
		<comments>http://codare.net/2009/09/25/python-introspecao-de-atributos-e-metodos-com-vars-locals-e-dir/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 12:00:59 +0000</pubDate>
		<dc:creator>Lauro Cesar de Oliveira</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[atributos]]></category>
		<category><![CDATA[locals]]></category>
		<category><![CDATA[vars]]></category>

		<guid isPermaLink="false">http://codare.net/?p=479</guid>
		<description><![CDATA[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)]]></description>
			<content:encoded><![CDATA[<p>Para descobrir os atributos de um objeto podemos utilizar:</p>
<pre>objeto.__dict__

vars(objeto)</pre>
<p>Para descobrir os atributos de uma classe:</p>
<pre>vars(Classe())</pre>
<p>Se utilizar vars() sem argumentos, funciona como locals(), listando todas as variáveis.</p>
<p>Para listar métodos e atributos de um objeto:</p>
<pre>dir(objeto)</pre>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/09/25/python-introspecao-de-atributos-e-metodos-com-vars-locals-e-dir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python: Teste condicional e estruturas de dados vazias</title>
		<link>http://codare.net/2009/06/03/python-teste-condicional-e-estruturas-de-dados-vazias/</link>
		<comments>http://codare.net/2009/06/03/python-teste-condicional-e-estruturas-de-dados-vazias/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 12:00:43 +0000</pubDate>
		<dc:creator>Thiago Marcos Santos</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[if]]></category>
		<category><![CDATA[overload]]></category>
		<category><![CDATA[__len__]]></category>
		<category><![CDATA[__nonzero__]]></category>

		<guid isPermaLink="false">http://codare.net/?p=430</guid>
		<description><![CDATA[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 &#8230; <a href="http://codare.net/2009/06/03/python-teste-condicional-e-estruturas-de-dados-vazias/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Classes que implementam o método __len__, quando testadas com if, este método é invocado. Portanto, para uma lista vazia, o teste falha.</p>
<pre>x = [];

if x:
    print "OK" # Nao imprime nada</pre>
<p>Para mudar este comportamento, basta reimplementar o método __nonzero__.</p>
<pre>class MyList(list):
    def __nonzero__(self):
        return True

x = MyList();

if x:
    print "OK" # Imprime OK</pre>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2009/06/03/python-teste-condicional-e-estruturas-de-dados-vazias/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Python: Pegadinhas com += e list.extend()</title>
		<link>http://codare.net/2007/05/14/python-pegadinhas-com-e-listextend/</link>
		<comments>http://codare.net/2007/05/14/python-pegadinhas-com-e-listextend/#comments</comments>
		<pubDate>Mon, 14 May 2007 12:30:52 +0000</pubDate>
		<dc:creator>Osvaldo Santana</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://codare.net/2007/05/14/python-pegadinhas-com-e-listextend/</guid>
		<description><![CDATA[Palavras-chave: Python, pegadinhas, gotchas, pitfalls, listas, extends Em Python o operador de soma e atribuição += pode ser usado na forma &#8220;a += 1&#8221; que tem o mesmo significado que a expressão &#8220;a = a + 1&#8220;. Até aí nada &#8230; <a href="http://codare.net/2007/05/14/python-pegadinhas-com-e-listextend/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: Python, pegadinhas, gotchas, pitfalls, listas, extends</p>
<p>Em Python o operador de soma e atribuição <tt>+=</tt> pode ser usado na forma &#8220;<tt>a += 1</tt>&#8221; que tem o mesmo significado que a expressão &#8220;<tt>a = a + 1</tt>&#8220;.</p>
<p>Até aí nada de diferente. Mas a linguagem Python disponibiliza uma função própria para tratar o operador <tt>+=</tt> (<tt>__iadd__</tt>) e outra para o operador de adição <tt>+</tt> (<tt>__add__</tt>). Na maioria das vezes o método <tt>__iadd__</tt> chama <tt>__add__</tt> e tudo fica certo. Mas não é isso que acontece com as listas.</p>
<p>Nos objetos do tipo <tt>list</tt> o método <tt>.__iadd__()</tt> irá chamar o método <tt>.extend()</tt> da lista. Desta forma podemos fazer coisas como:</p>
<pre>
&gt;&gt;&gt; a = [1,2,3]
&gt;&gt;&gt; a += [4,5,6]
&gt;&gt;&gt; a
[1, 2, 3, 4, 5, 6]
&gt;&gt;&gt; a.extend([7,8,9])
&gt;&gt;&gt; a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
&gt;&gt;&gt; a = [1,2,3]
&gt;&gt;&gt; a + [4,5,6]
[1, 2, 3, 4, 5, 6]
</pre>
<p>As coisas começam a ficar complicadas quando temos uma situação que envolve strings, como no caso seguinte. Lembre-se que strings também são consideradas seqüências em Python.</p>
<pre>
&gt;&gt;&gt; a = [1,2,3]
&gt;&gt;&gt; a + "spam"
Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  TypeError: can only concatenate list (not "str") to list
&gt;&gt;&gt; a += "spam"
&gt;&gt;&gt; a
[1, 2, 3, 's', 'p', 'a', 'm']
&gt;&gt;&gt; a.extend("eggs")
&gt;&gt;&gt; a
[1, 2, 3, 's', 'p', 'a', 'm', 'e', 'g', 'g', 's']
</pre>
<p>Os exemplos acima deixam claro que é preciso tomar cuidado com esse tipo de situação em seus programas.</p>
<p>Alguns argumentam que esse comportamento da lista não é muito consistente e que esse &#8220;problema&#8221; deveria ser consertado. Mas existe um outro grupo que diz que esso é o comportamento correto. Até que esses grupos entrem num acordo é bom ficarmos de olho.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2007/05/14/python-pegadinhas-com-e-listextend/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Python: Singleton</title>
		<link>http://codare.net/2007/05/03/python-singleton/</link>
		<comments>http://codare.net/2007/05/03/python-singleton/#comments</comments>
		<pubDate>Thu, 03 May 2007 12:00:18 +0000</pubDate>
		<dc:creator>Osvaldo Santana</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://codare.net/2007/05/03/python-singleton/</guid>
		<description><![CDATA[Palavras-chave: Python, Design Patterns, Padrões de Projeto, OOP, POO Um Singleton é um dos padrões de projeto descrito no famoso livro &#8220;Design Patterns&#8221; escrito pela GoF (Gang of Four) e o seu funcionamento é bastante simples: uma classe é chamada &#8230; <a href="http://codare.net/2007/05/03/python-singleton/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: Python, Design Patterns, Padrões de Projeto, OOP, POO</p>
<p>Um <em>Singleton</em> é um dos padrões de projeto descrito no famoso livro &#8220;Design Patterns&#8221; escrito pela GoF (<em>Gang of Four</em>) e o seu funcionamento é bastante simples: uma classe é chamada de Singleton quando ela permite apenas uma única instância.</p>
<p>A maneira de se implementar um Singleton descrita no livro consiste em definir um método <tt>get_instance()</tt> na classe que ficará responsável por criar a primeira instância e a partir daí retorná-la sempre que for chamada.</p>
<p>Mas a natureza dinâmica de Python e seu sistema de meta-classes permitem que se crie uma classe chamada Singleton genérica que podemos usar como super-classe dos nossos próprios Singletons:</p>
<pre>
class Singleton(object):
   def __new__(cls, *args, **kwargs):
      if '_inst' not in vars(cls):
         cls._inst = type.__new__(cls, *args, **kwargs)
      return cls._inst
</pre>
<p>Agora, para que a sua classe se transforme em Singleton basta apenas derivá-la desta classe e não é mais necessário implementar o método <tt>get_instance()</tt>. O seu uso ficaria assim:</p>
<pre>
class MeuSingleton(Singleton):
   pass

a = MeuSingleton()
b = MeuSingleton()

print a is b # imprimirá True, pois trata-se da mesma instância
</pre>
<p>Essa dica faz parte do livro Python Cookbook e foi escrita por Jürgen Hermann. No livro você poderá encontrar as explicações detalhadas sobre essa classe e mais uma série de outras dicas interessantes sobre diversos assuntos.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2007/05/03/python-singleton/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Python: Cópia &quot;rasa&quot; de listas</title>
		<link>http://codare.net/2007/04/04/python-copia-rasa-de-listas/</link>
		<comments>http://codare.net/2007/04/04/python-copia-rasa-de-listas/#comments</comments>
		<pubDate>Wed, 04 Apr 2007 12:00:01 +0000</pubDate>
		<dc:creator>Osvaldo Santana</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://codare.net/2007/04/04/python-copia-rasa-de-listas/</guid>
		<description><![CDATA[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 &#8230; <a href="http://codare.net/2007/04/04/python-copia-rasa-de-listas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: Python, listas, cópia, objetos</p>
<p>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 vista a seguir:</p>
<pre class="brush: python; title: ;">
&gt;&gt;&gt; a = [1,2,3]
&gt;&gt;&gt; b = a
&gt;&gt;&gt; b is a
True
&gt;&gt;&gt; a.append(4)
&gt;&gt;&gt; b
[1, 2, 3, 4]
</pre>
<p>Por essa razão precisamos fazer cópias dos objetos quando queremos manipular os dados de uma das variáveis sem afetar os dados da outra.</p>
<p>A biblioteca Python disponibiliza o módulo <tt>copy</tt> para essa tarefa, mas em casos de listas (ou qualquer outra seqüência como strings e tuplas) existe uma maneira mais simples de se fazer isso: utilizando <em>slicing</em>, veja:</p>
<pre>
&gt;&gt;&gt; a = [1,2,3]
&gt;&gt;&gt; b = a[:]
&gt;&gt;&gt; a is b
False
&gt;&gt;&gt; a.append(4)
&gt;&gt;&gt; b
[1, 2, 3]
&gt;&gt;&gt; a
[1, 2, 3, 4]
</pre>
<p>A operação de <em>slicing</em> retornou uma cópia idêntica da lista porque <tt>a[:]</tt> é o mesmo que <tt>a[0:len(a)]</tt>. Vale lembrar, porém, que apenas a lista é copiada e não os objetos que estão dentro dela.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2007/04/04/python-copia-rasa-de-listas/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Python: Desligando o prompt de comandos no Windows</title>
		<link>http://codare.net/2007/03/28/python-desligando-o-prompt-de-comandos-no-windows/</link>
		<comments>http://codare.net/2007/03/28/python-desligando-o-prompt-de-comandos-no-windows/#comments</comments>
		<pubDate>Wed, 28 Mar 2007 12:00:10 +0000</pubDate>
		<dc:creator>Osvaldo Santana</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://codare.net/2007/03/28/python-desligando-o-prompt-de-comandos-no-windows/</guid>
		<description><![CDATA[Palavras-chave: Python, command prompt, prompt de comandos, prompt, DOS, Windows Quando executamos um programa &#8220;.py&#8221; 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 &#8230; <a href="http://codare.net/2007/03/28/python-desligando-o-prompt-de-comandos-no-windows/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: Python, command prompt, prompt de comandos, prompt, DOS, Windows</p>
<p>Quando executamos um programa &#8220;<tt>.py</tt>&#8221; no Windows uma janela de <em>prompt</em> irá aparecer automaticamente para que as eventuais saídas de texto do seu programa sejam enviadas para lá.</p>
<p>Mas essa janela pode se tornar incoveniente quando o nosso programa já provê uma interface gráfica pois, neste caso, teríamos duas janelas abertas para a mesma aplicação.</p>
<p>A janela aparece porque a extensão &#8220;<tt>.py</tt>&#8221; está associada ao interpretador &#8220;<tt>X:\PythonXX\<strong>python.exe</strong></tt>&#8221; que está configurado para abrir uma janela de <em>prompt</em>.</p>
<p>Caso você precise executar seu programa sem essa janela é melhor usar o interpretador &#8220;<tt>X:\PythonXX\<strong>pythonw.exe</strong></tt>&#8221; que é feito justamente para esse propósito.</p>
<p>A extensão &#8220;<tt>.pyw</tt>&#8221; é associada à esse interpretador, portanto, basta renomear os seus arquivos <tt>.py</tt>, <tt>.pyc</tt> e <tt>.pyo</tt> para <tt>.pyw</tt> que as janelas de <em>prompt</em> deixarão de aparecer.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2007/03/28/python-desligando-o-prompt-de-comandos-no-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python: Fazer switch/case com dicionários</title>
		<link>http://codare.net/2007/03/22/python-fazer-switch-case-com-dicionarios/</link>
		<comments>http://codare.net/2007/03/22/python-fazer-switch-case-com-dicionarios/#comments</comments>
		<pubDate>Thu, 22 Mar 2007 12:00:14 +0000</pubDate>
		<dc:creator>Osvaldo Santana</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://codare.net/2007/03/22/python-fazer-switch-case-com-dicionarios/</guid>
		<description><![CDATA[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 &#8230; <a href="http://codare.net/2007/03/22/python-fazer-switch-case-com-dicionarios/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: Python, dicionários, switch, case</p>
<p>Algumas pessoas reclamam de que Python não possui uma instrução <tt>switch/case</tt>, que permite executar trechos de código dependendo do valor de uma determinada variável.</p>
<p>Python realmente não disponibiliza essa funcionalidade, mas podemos simulá-la utilizando funções e dicionários. Para isso basta lembrar que funções e métodos em Python também são objetos. Veja:</p>
<pre>
def func1(): print "func1"
def func2(): print "func2"
def func_default(): print "default"

switch = {
   1: func1,
   2: func2,
}

for case in range(3):
   try:
      # chamamos a funcao aqui
      switch[case]()
   except KeyError, e:
      # se nao existe, chamamos o default
      func_default()
</pre>
<p>Quando executarmos este exemplo o resultado será:</p>
<pre>
default
func1
func2
</pre>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2007/03/22/python-fazer-switch-case-com-dicionarios/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Python: Listagem com cores alternadas (zebra)</title>
		<link>http://codare.net/2007/03/16/python-listagem-com-cores-alternadas-zebra/</link>
		<comments>http://codare.net/2007/03/16/python-listagem-com-cores-alternadas-zebra/#comments</comments>
		<pubDate>Fri, 16 Mar 2007 12:00:17 +0000</pubDate>
		<dc:creator>Osvaldo Santana</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://codare.net/2007/03/16/python-listagem-com-cores-alternadas-zebra/</guid>
		<description><![CDATA[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 &#8230; <a href="http://codare.net/2007/03/16/python-listagem-com-cores-alternadas-zebra/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: Python, listagem, cores, zebrado, zebra list</p>
<p>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.</p>
<p>O meu amigo Ulysses, mais uma vez (estou até pensando em deixá-lo escrevendo por aqui) deu uma dica excelente para fazer isso, veja:</p>
<pre>
cores = ["#F5F5F5", "#FFFFFF"]
for n, linha in enumerate(linhas):
   cor_fundo = cores[n % 2]
   # aqui vai o seu código...
</pre>
<p>Vou aproveitar também essa dica para embutir uma outra dica mais voltada para a &#8220;usabilidade&#8221;: a diferença de saturação entre uma cor e outra usada no exemplo acima deve ser pequena para tornar esse efeito efetivo.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2007/03/16/python-listagem-com-cores-alternadas-zebra/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Python: Evitando o excesso de &quot;or&quot; em condicionais</title>
		<link>http://codare.net/2007/03/09/python-evitando-o-excesso-de-or-em-condicionais/</link>
		<comments>http://codare.net/2007/03/09/python-evitando-o-excesso-de-or-em-condicionais/#comments</comments>
		<pubDate>Fri, 09 Mar 2007 12:00:05 +0000</pubDate>
		<dc:creator>Osvaldo Santana</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://codare.net/2007/03/09/python-evitando-o-excesso-de-or-em-condicionais/</guid>
		<description><![CDATA[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 &#8220;or&#8221;: if a == "foo" or a == "bar" &#8230; <a href="http://codare.net/2007/03/09/python-evitando-o-excesso-de-or-em-condicionais/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: Python, or, in, if, while, condicional, pythonico</p>
<p>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 &#8220;or&#8221;:</p>
<pre>
if a == "foo" or a == "bar" or a == "baz":
   print a
</pre>
<p>Imagine o tamanho dessa cláusula quando precisar comparar o valor de &#8220;<tt>a</tt>&#8221; com muitos outros valores. Para essas situações você pode usar o operador &#8220;<tt>in</tt>&#8221; do Python que verifica se há uma ocorrência do objeto em uma lista:</p>
<pre>
if a in ["foo", "bar", "baz"]:
   print a
</pre>
<p>Ficou bem mais simples e legível, não? Esta é a maneira &#8220;pythônica&#8221; de se montar esse tipo de cláusula condicional.</p>
<p>Essa dica foi sugerida pelo meu amigo Ulysses que me atentou para o fato de que os novatos na linguagem costumam fazer esse tipo de cláusula da forma inadequada.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2007/03/09/python-evitando-o-excesso-de-or-em-condicionais/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

