Ir para o conteúdo
ou

Software livre Brasil

Magnun

Nenhum artigo selecionado ainda.
 Voltar a Blog
Tela cheia

[Curso de Python] Entendendo o For

10 de Fevereiro de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 186 vezes

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:

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
>>>
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.

Todos os objetos possuem o mesmo comportamento no for, com exceção do dicionário:
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
>>>
O for retorna somente as chaves de um dicionário, para obtermos o valor associado a aquela chave utilizamos 'slicing':
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
>>>
É 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.items()
[('Gish', 1991), ('Mellon Collie', 1995), ('Siamese Dream', 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 = {'Gish':1991, 'Siamese Dream':1993, 'Mellon Collie':1995
}
>>> for item in smashing_pumpkins.items():
...  print item
...
('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 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
>>>
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.

Fonte: http://under-linux.org/blogs/magnun/curso-de-python-entendendo-o-1833/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.