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

Diferenças para "TheZenOfPythonExplained"

Diferenças entre as versões de 1 e 2
Revisão 1e 2006-11-01 16:44:08
Tamanho: 3411
Editor: WalterCruz
Comentário:
Revisão 2e 2006-11-01 16:52:24
Tamanho: 3538
Editor: WalterCruz
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 7: Linha 7:
{{{
#!python
Linha 8: Linha 10:
}}}
Linha 11: Linha 14:
{{{
#!python
Linha 12: Linha 17:
}}}
Linha 14: Linha 19:
{{{
#!python
Linha 21: Linha 27:
}}}
Linha 23: Linha 31:
{{{
#!python
Linha 24: Linha 34:
}}}
Linha 27: Linha 38:
>>> x , i = [], 0
>>> while 1:
... if i>10:
... break
... else:
... i = i + 1
... x.append(i)
{{{
#!python
x , i = [], 0
while 1:
    if i>10:
        break
    else:
        i = i + 1
        x.append(i)
}}}
Linha 37: Linha 51:
>>> x , i = [], 0
>>> while 1:
... if i>10:
... break
... else:
... i = i + 1
... x.append(i)
...
{{{
#!python
x , i = [], 0
while 1:
    if i>10:
        break
    else:
        i = i + 1
        x.append(i)
}}}
Linha 48: Linha 64:
>>> x , i = [], 0
>>> while i>10:
... i += 1
... x.append(i)
...
{{{
#!python
x , i = [], 0
while i>10:
        i += 1
        x.append(i)
}}}
Linha 54: Linha 72:
Ou compare Zope e J2EE.
Linha 58: Linha 75:
>>> x = {"nome": ('fulano','da vida'), {{{
#!python
x = {"nome": ('fulano','da vida'),
Linha 61: Linha 80:
}}}
Linha 64: Linha 84:
>>> x = {"nome": 'fulano', "sobrenome":'da vida', {{{
#!python
x = {"nome": 'fulano', "sobrenome":'da vida',
Linha 66: Linha 88:
}}}
Linha 70: Linha 93:
{{{
#!python
Linha 71: Linha 96:
}}}
Linha 75: Linha 101:
 >>> [i**2 for i in [j for j in range(10) if j%2==0]] {{{
#!python
[i**2 for i in [j for j in range(10) if j%2==0]]
}}}
Linha 79: Linha 108:
 >>> 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!
{{{
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!
}}}
Linha 86: Linha 117:
>>> x = [ 4, 8, 15, 16, 23, "42" ]
>>> r = 0
>>> for i in x:
... if isinstance(i, basestring):
... i = int(i)
... r += i
{{{
x = [ 4, 8, 15, 16, 23, "42" ]
r = 0
for i in x:
     if isinstance(i, basestring):
         i = int(i)
     r += i
}}}
Linha 95: Linha 127:
>>> for i in x:
... try:
... r += i
... except TypeError:
... r += int(i)
{{{
#!python
for i in x:
    try:
        r += i
    except TypeError:
        r += int(i)

}}}
Linha 103: Linha 139:
{{{
Linha 107: Linha 144:
}}}
Linha 110: Linha 148:
{{{
#!python
Linha 114: Linha 154:
}}}
Linha 117: Linha 158:
{{{
#!python
Linha 121: Linha 164:
}}}
Linha 123: Linha 167:
{{{
1 + '1'
Linha 124: Linha 170:
>>> 1 + '1'
Linha 128: Linha 173:
}}}
Linha 136: Linha 182:

=== Although never is often better than *right* now. ===
=== Although never is often better than right* now ===

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!