Programação funcional: cálculo lambda
1. Funções lambda, além de anônimas, reduzem expressões de forma significativa,
fazendo com que o maior número de instruções possa ser expresso na mesma linha.
Apesar de não ser
considerada uma linguagem funcional, o Python vem implementando diversas
funcionalidades, entre elas as funções lambda, de modo a permitir a otimização de
seu código.
Dada a seguinte função lambda na linguagem Python:
lista = [2,3,5,7]
nova_lista = map(lambda x:x*2, lista)
for i in nova_lista:
print i
O que deve ser mostrado na tela?
R: B. 4
6
10
14
A função Map tem como objetivo mapear os elementos e retornar os resultados de
acordo com o que o função instruir. Neste caso, o solicitado era a varredura do
array e a multiplicação
de cada elemento por 2.
2. As funções internas ou embutidas, como filter, permitem que os dados sejam
filtrados de uma lista a partir de uma instrução computacional. Essa função evita a
necessidade de mudança
de estado das variáveis, que tende a tornar expressões impuras.
Observe a função e diga qual mecanismo lambda está expresso na sentença:
lista1 = range(1, 20)
lista2 = filter (lambda x: x % 4 == 0, lista1)
for i in lista2:
print i
A saída é a seguinte:
4
8
12
16
R: A. Filter.
A função filter, como o próprio nome sugere, filtra os elementos e retorna valores
que, quando comparados à uma instrução computacional, são verdadeiros. Neste caso,
foi dado um
intervalo de 1 a 20 em que a função solicitava que cada item fosse verificado e
que, se o resto da divisão por 4 fosse zero, o valor deveria ser mostrado na tela.
Map, zip e reduce são outras
funções que também podem ser utilizadas em programação funcional, com
funcionalidades diferentes. A recursividade é justamente o que se evita ao utilizar
funções como a filter, pois
esta geralmente realiza a mudança de valores de uma variável, o que a torna impura
e não correspondente ao objetivo da programação funcional.
3. As funções Map, Filter e outras nos permitem manipular listas de forma limpa e
prática, sem que isso cause efeitos colaterais no restante do código. Sabendo
disso, analise a seguinte
situação:
Laura está modificando o sistema financeiro da universidade em que trabalha. O
gerente financeiro solicitou que fossem calculados diariamente os valores recebidos
nas negociações com
os alunos. Laura sabe que todos os valores inseridos no sistema são armazenados em
um array. Qual função lambda Laura poderá utilizar para somar todos os valores
inseridos no
sistema e, ao final do dia, entregar para seu gerente o montante total?
R: D. Reduce.
Laura deverá utilizar a função Reduce, que retorna argumentos de forma cumulativa e
coloca-os em uma nova lista. A função Map varre listas e realiza a ação dentro da
função com cada
item. A função Filter também mapeia listas e realiza um filtro que satisfaça a
condição atribuindo True a ela. A função Soma está dentro do escopo da orientação a
objetos e precisaria de
ajustes como a incrementação, que não fazem parte da programação funcional.
Booleana é a operação que retorna um valor verdadeiro ou falso. Esta verificação é
feita na execução das
funções Map, Filter e Reduce como parâmetro para mostrar os elementos na tela.
4. De modo geral, o uso de funções lambda entrega ao desenvolvedor a possibilidade
de um código mais limpo, conciso e imutável. São as chamadas funções puras. Para
tanto, é preciso
compreender a notação nativa da linguagem e a notação lambda, para só então
entender a transformação realizada nas linhas do código. Sabendo disso, analise a
situação:
Dada a função soma em Python, escolha a alternativa que representa a conversão
utilizando lambda para reescrever o código:
def soma (a,b,c):
return a+b+c
>>> x = soma
>>> x(10,20,30)
>>>60
5. De forma muito clara e amigável, a função Filter realiza a verificação de uma
lista e a extração dos elementos solicitados pela expressão ou função diretamente
ligada a ela. Como
resultado, ela traz uma nova lista contendo os elementos extraídos após a execução
da função.
Analise a função lambda que recebe um array com as alturas de todos os candidatos
de uma agência de propaganda. Verifique a sintaxe e marque a alternativa que
informa o que a função
irá retornar na tela:
alturaMetros=[1.65,1.80,1.72,1.74,1.68,1.91]
def main( ):
print filter(lambda x: x > 1.70 > 1.90 ,alturaMetros)
return 0
if name == ' main ':
main( )
R: E. [1.80, 1.72, 1.74]
A função lambda traz uma variável contendo alturas entre 1.65 e 1.91 e pede que,
por meio da função Filter, sejam retornados os valores do array maiores que 1.70 e
menores que 1.90.
Com isso, os valores mostrados na tela serão: [1.80, 1.72, 1.74].