[Curso de Python] Entendendo o For
por
em 10-02-2010 às 08:31 (9723 Visualizações)
Antes de prosseguir leia os artigos anteriores aqui.
Olá pessoal! Hoje vamos entender mais um pouco da estrutura for. Vamos começar a ver como o for faz a sua mágica e reduz (muito) o trabalho do desenvolvedor!
Entendendo o For
Como já foi comentado no último post, o for parece estranho para quem está acostumado com linguagens como C/C++ e Java. Nessas linguagens, é necessário informar ao for um limite, para que ele saiba quando parar. No Python ele simplesmente sabe quando parar, como isso é feito?
O For funciona somente com objetos iteráveis, isto é, strings comuns, strings unicode, tuplas, listas, byte arrays, sets comuns, frozen sets, e dicionários. Alguns desses tipos ainda não foram abordados nesse curso por não terem um uso muito frequente.
Quando o for recebe um objeto iterável ele usa a função iter para criar um iterador. Um iterador funciona similar a um ponteiro indicando um objeto. Quando solicitamos a esse iterador o próximo objeto ele pula uma "casa" e retorna o próximo objeto. A baixo temos um exemplo dessa idéia:
Ao solicitarmos o próximo objeto, após o final do objeto iterável, recebemos o erro "StopIteration". Com esse erro o for sabe que deve parar a iteração.Código :>>> frase = "teste" >>> ponteiro = iter(frase) >>> type(ponteiro) <type 'iterator'> >>> ponteiro.next() 't' >>> ponteiro.next() 'e' >>> ponteiro.next() 's' >>> ponteiro.next() 't' >>> ponteiro.next() 'e' >>> ponteiro.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>
Todos os objetos possuem o mesmo comportamento no for, com exceção do dicionário:
O for retorna somente as chaves de um dicionário, para obtermos o valor associado a aquela chave utilizamos 'slicing':Código :>>> for item in ('abc', 'cde', 'efg'): ... print 'item='+item ... item=abc item=cde item=efg >>> >>> for numero in [1, 2, 3]: ... print 'numero:',numero ... numero: 1 numero: 2 numero: 3 >>> >>> for album in {'Gish':1991, 'Siamese Dream':1993, 'Mellon Collie':1995}: ... print album ... Gish Mellon Collie Siamese Dream >>>
É possível também utilizar o método items, que cria uma lista de tuplas. Segue um exemplo para melhor entendimento:Código :>>> smashing_pumpkins = {'Gish':1991, 'Siamese Dream':1993, 'Mellon Collie':1995} >>> for album in smashing_pumpkins: ... print 'O album',album,'foi lancado em',smashing_pumpkins[album] ... O album Gish foi lancado em 1991 O album Mellon Collie foi lancado em 1995 O album Siamese Dream foi lancado em 1993 >>>
Cada tuplas dentro da lista é um par chave/valor. Se utilizarmos isso dentro do for teremos um resultado bem diferente:Código :>>> smashing_pumpkins.items() [('Gish', 1991), ('Mellon Collie', 1995), ('Siamese Dream', 1993)] >>>
Agora o item a ser retornado passa a ser um tupla com a chave e o valor associado a ela. É possível utilizar o slicing para obter o nome do album e o ano de lançamento, mas existe também um abordagem mais organizada. Para uma melhor legibilidade do código, podemos fazer o 'unpack' (desempacotar) da tupla. O unpack pode ser feito conforme abaixo:Código :>>> smashing_pumpkins = {'Gish':1991, 'Siamese Dream':1993, 'Mellon Collie':1995 } >>> for item in smashing_pumpkins.items(): ... print item ... ('Gish', 1991) ('Mellon Collie', 1995) ('Siamese Dream', 1993) >>>
Dessa forma temos um código limpo, compacto e extremamente legível. Mesmo que ninguém saiba qual o conteúdo do dicionário smashing_pumpkins, ao ler o for, sabe que as chaves são os nomes dos albums e os valores são os anos de lançamento.Código :>>> smashing_pumpkins = {'Gish':1991, 'Siamese Dream':1993, 'Mellon Collie':1995 } >>> for album,ano in smashing_pumpkins.items(): ... print 'O album',album,'foi lançado em',ano ... O album Gish foi lançado em 1991 O album Mellon Collie foi lançado em 1995 O album Siamese Dream foi lançado em 1993 >>>
Comentários
+ Enviar Comentário