Tableless

Busca Menu

Por que Python? (parte 2)

Seja o primeiro a comentar por

Continuando meu artigo anterior, vou tentar mostrar alguns motivos porque, em minha opinião, é tão bom escrever código Python. E dessa vez vamos falar da sintaxe da linguagem e seus tipos de dados. As características e recursos da sintaxe tornam Python uma linguagem tão poderosa e produtiva. Veja os exemplos:

Packing e Unpacking

# encoding: utf-8
# Atribuindo três valores de uma vez
a, b, c = 2, 3, 5
 
# Trocando o valor de duas variáveis:
a, b = b, a

# Uma função que retorna mais de um valor:
def vizinhos(n):
    return n-1, n+1

# Executando a função acima e guardando os valores em duas variáveis:
x, y = vizinhos(42)

Sem sobrecarga de métodos

Você pode escrever uma função que pode receber parâmetros opcionais assim:

def addr(domain, path='/', querystring='', hash=''):
    return 'http://%s%s%s%s' % (domain,path,querystring,hash)

E pode chamar com um, dois, três ou quatro parâmetros:

>>> addr('tableless.com.br')
'http://tableless.com.br/'
>>> addr('tableless.com.br','/code/css/')
'http://tableless.com.br/code/css/'
>>> addr('tableless.com.br',querystring='?s=python')
'http://tableless.com.br/?s=python'

Você pode até criar uma função que recebe qualquer quantidade de parâmetros:

def div(content,**attributes):
    html="<div"
    for attribute in attributes.iteritems():
        html+=' %s="%s"' % attribute
    html+=">"+content+"</div>"
    return html

Veja funcionando:

>>> div("Hello")
'<div>Hello</div>'
>>> div("Hello",id="blue")
'<div id="blue">Hello</div>'
>>> div("Hello",id="blue",contenteditable="true",title="Edite como quiser.")
'<div contenteditable="true" id="blue" title="Edite como quiser.">Hello</div>'

Listas poderosas

Em programação, lidamos com arrays o tempo todo. Ter arrays flexíveis e poderosos em uma linguagem é algo que vai te ajudar o tempo todo. Veja esses exemplos:

>>> import random
>>> l=[random.randint(0,100) for i in range(20)]
>>> l
[4, 89, 49, 87, 33, 7, 57, 41, 50, 53, 63, 71, 12, 57, 4, 32, 13, 9, 67, 9]
>>> l[0] # Primeiro elemento
4
>>> l[1] # Segundo elemento
89
>>> l[-1] # Último elemento
9
>>> l[-2] # Penúltimo elemento
67
>>> l[0:5] # Primeiros cinco elementos
[4, 89, 49, 87, 33]
>>> l[:5] # Primeiros cinco elementos
[4, 89, 49, 87, 33]
>>> l[-5:] # Últimos cinco elementos
[32, 13, 9, 67, 9]
>>> l[4::-1] # Primeiros cinco elementos, de trás para frente
[33, 87, 49, 89, 4]
>>> l="abcdefghijklmnopqrstuvwxyz"
>>> l[1] # Segundo elemento
'b'
>>> l[:5] # Primeiros cinco elementos
'abcde'
>>> l[-5:] # Últimos cinco elementos
'vwxyz'
>>> l[4::-1] # Primeiros cinco elementos, de trás para frente
'edcba'

Veja, por exemplo, como saber quais os elementos comuns entre duas listas:

>>> l1=[1,2,3,4,5,6,7,8,9]
>>> l2=[1,3,5,7,9]
>>> set(l1) & set(l2)
set([7, 1, 3, 5, 9])

E como remover de uma lista os elementos que existem em outra:

>> set(l1)-set(l2)
set([8, 2, 4, 6])

Vamos criar uma função que recebe uma lista de strings e retorna uma lista HTML em ordem alfabética, com os duplicados removidos:

def ol(l):
    return "\n".join("<li>%s</li>" % i for i in sorted(set(l)))

Veja funcionando:

>>> print ol(["charlie","foxtrot","bravo","delta","bravo","juliet","charlie","echo","alpha","bravo"])
<li>alpha</li>
<li>bravo</li>
<li>charlie</li>
<li>delta</li>
<li>echo</li>
<li>foxtrot</li>
<li>juliet</li>

De novo, a biblioteca padrão

Por exemplo, estou apaixonado pelo módulo itertools:

>>> import itertools
>>> for i in itertools.permutations('abc'):
...     print ''.join(i)
...
abc
acb
bac
bca
cab
cba
>>> for i in itertools.combinations('abc',2):
...     print ''.join(i)
...
ab
ac
bc

No próximo artigo vamos falar mais sobre a biblioteca padrão.

Publicado no dia