associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

TheZenOfPythonExplained

TheZenOfPythonExplained aqui

Essa á uma adaptação de um e-mail muito divertido que o Senra enviou para a lista pythonbrasil, respondendo à pergunta do Lucas, que queria saber o significado exato de cada frase do Zen. Com o tempo e o uso, o Zen vai se tornando mais claro. Segundo o Senra: "muita vezes o Zen é contraditório. Por isso Zen tem que ser vivenciado e experimentado, qualquer explicação será incompleta. Como dizem os taoístas: o verdadeiro Tao é aquele que não pode se enunciado. "

Beautiful is better than ugly.

   1 2 .__add__(1)

ou

   1 2+1

Explicit is better than implicit.

   1 def exponenciacao(expoente, base):
   2     # ordem dos parametros invertida propositalmente
   3     return base**expoente
   4 
   5 exponenciacao(2,3)
  • ou

   1 exponenciacao(base=2, expoente=3)

Simple is better than complex.

   1 x , i = [], 0
   2 while 1:
   3     if i>10:
   4         break
   5     else:
   6         i = i + 1
   7         x.append(i)

Complex is better than complicated.

   1 x , i = [], 0
   2 while 1:
   3     if i>10:
   4         break
   5     else:
   6         i = i + 1
   7         x.append(i)

ou

   1 x , i = [], 0
   2 while i>10:
   3         i += 1
   4         x.append(i)

Flat is better than nested.

   1 x = {"nome": ('fulano','da vida'),
   2          "contato":{"fones":('12345','67890'),
   3 "email":'belex@davida.com'}}

ou

   1 x = {"nome": 'fulano', "sobrenome":'da vida',
   2          "fone":'12345', "cel":'67890', "email":'belex@davida.com'}

Para facilitar a resposta (quem pensou que o primeiro era + organizadinho)...

   1 x["contato"][1] ou x["cel"]

Sparse is better than dense.

Readability counts.

   1 [i**2 for i in [j for j in range(10) if j%2==0]]

ou

sequencia = range(10)
pares = [j for j in sequencia if j%2==0]
[i**2 for i in pares]
del sequencia, pares # vamos deixar a casa limpa!

Special cases aren't special enough to break the rules.

x = [ 4, 8, 15, 16, 23, "42" ]
r = 0
for i in x:
     if isinstance(i, basestring):
         i = int(i)
     r += i

ou

   1 for i in x:
   2     try:
   3         r += i
   4     except TypeError:
   5         r += int(i)

Although practicality beats purity.

 >>> x = [ 4, 8, 15, 16, 23, "42" ]
 >>> r = sum(int(i) for i in x)
 >>> r
108

Errors should never pass silently.

   1 try:
   2     # do something
   3 except:
   4     pass

Unless explicitly silenced.

   1 try:
   2     # do something
   3 except SomeException:
   4     pass

In the face of ambiguity, refuse the temptation to guess.

1 + '1'

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: unsupported operand type(s) for +: 'int' and 'str'

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

O Guido é holandês

Now is better than never.

Although never is often better than right* now

=== If the implementation is hard to explain, it's a bad idea. ===

Pense três vezes antes de usar metaclasses

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!