5.1.3 Functional Programming Tools

Existem três funções internas que são muito úteis quando usadas com listas: filter(), map() e reduce().”Filter(function, sequence)” retorna uma sequência que consiste nos itens da sequência para a qual a função (item) é verdadeira. Se a sequence for uma string ou tupla, o resultado será do mesmo tipo; caso contrário, é sempre uma lista. Por exemplo, para calcular alguns primos:

>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]

“Map(function, sequence)” chama a função(item) para cada um dos itens na sequência e retorna uma lista dos valores de retorno. Por exemplo, para calcular alguns cubos:

>>> def cube(x): return x*x*x
...
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

Mais de uma seqüência pode ser passada; a função deve então ter tantos argumentos quanto houver seqüências e é chamada com o item correspondente de cada sequência (ou Nenhum, se alguma sequência for menor que outra). Por exemplo:

>>> seq = range(8)
>>> def add(x, y): return x+y
...
>>> map(add, seq, seq)
[0, 2, 4, 6, 8, 10, 12, 14]

“Reduce(function, sequence)” retorna um único valor construído chamando a função de função binária nos dois primeiros itens da sequência, depois no resultado e no próximo item, e assim por diante. Por exemplo, para calcular a soma dos números de 1 a 10:

>>> def add(x,y): return x+y
...
>>> reduce(add, range(1, 11))
55

Se houver apenas um item na sequência, seu valor será retornado; Se a sequência estiver vazia, uma exceção será levantada.

Um terceiro argumento pode ser passado para indicar o valor inicial. Nesse caso, o valor inicial é retornado para uma sequência vazia, e a função é aplicada primeiro ao valor inicial e ao primeiro item da sequência, depois ao resultado e ao próximo item, e assim por diante. Por exemplo,

>>> def sum(seq):
...     def add(x,y): return x+y
...     return reduce(add, seq, 0)
... 
>>> sum(range(1, 11))
55
>>> sum([])
0

Não use a definição do exemplo de sum(): como os números de soma são uma necessidade comum, uma soma de função sum(sequence) já é fornecida e funciona exatamente assim. (Adicionado na versão 2.3 do Python)

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s