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 'https://%s%s%s%s' % (domain,path,querystring,hash)
E pode chamar com um, dois, três ou quatro parâmetros:
>>> addr('tableless.com.br') 'https://tableless.com.br/' >>> addr('tableless.com.br','/code/css/') 'https://tableless.com.br/code/css/' >>> addr('tableless.com.br',querystring='?s=python') 'https://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.