PROGRAMAÇÃO
BACK END I
Pedro Henrique Chagas Freitas
Funções lambda em Python
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
Identificar as funções lambda.
Programar utilizando funções lambda.
Comparar funções lambda e funções def.
Introdução
Neste capítulo, abordaremos os principais conceitos de funções lam-
bda. Para isso, implementaremos estas funções e iremos compará-las
às funções def da linguagem Python.
Funções lambda da linguagem Python
Lambda possui todas as características de uma função, conforme apresen-
taremos a seguir, somente com duas exceções (MORE CONTROL..., 2019,
documento on-line):
as funções lambda não possuem uma definição em código, ou seja,
são declaradas como variáveis e não possuem um def próprio;
as funções lambda são funções de uma linha que funcionam como se
houvesse a instrução return antes do fim do comando.
Estas duas situações específicas diferenciam a função lambda da função
def e dos demais tipos de funções (TONSIG, 2008). Quanto a sua estrutura,
as funções lambda implementam expressões reutilizáveis, como blocos que
executam determinadas ações. Por exemplo, print e input são funções,
assim como o lambda, e representam ações dentro da linguagem Python.
2 Funções lambda em Python
Uma boa prática, inclusive empregada em Python, determina que cada
função deve executar uma ação: não é recomendável que uma função tenha
duas, três ou quatro tarefas (PRESSMAN, 2011). A maioria das funções é
inicializada pela palavra def, que é utilizada para definir uma função, ou
seja, inserimos a palavra def (definir função) e, em seguida, colocamos o
nome da função. Veja o exemplo a seguir.
def seja _ bem _ vindo _ a _ python():
print("Seja bem-vindo a Python")
No caso do lambda, não é preciso utilizar a palavra def para definir uma
função. Em funções lambda, simplesmente incluímos o nome da função,
inclusive os caracteres ( e ), podendo apresentar ou não comandos de bloco,
como if, while, for, etc. (SOMMERVILLE, 2007).
A seguir, implementaremos um somatório com def e com lambda, a fim
de ilustrar a implementação das duas funções e suas diferenças.
Com a função def:
def soma(numero1, numero2):
return numero1 + numero2
Com a função lambda:
soma _ lambda = lambda numero1, numero2: numero1 + numero2;
Conforme podemos ver, a função def é uma função de soma normal,
enquanto a função lambda é mais simples, com sintaxe declarando lambda
no início da expressão e, em seguida, já inserindo os parâmetros separados
por vírgula e o respectivo corpo da expressão ([Link]).
Podemos, então, perceber que a linguagem Python nos permite utilizar
tanto a função def como a função lambda para os mesmos objetivos. Se
inserirmos uma chamada à função print para verificar o resultado das
expressões, teremos:
print(soma (1,2))
print(soma _ lambda(1,2))
Funções lambda em Python 3
Ambos terão como resultado o valor total 3. Também é possível ter uma
função sem parâmetro, na qual apenas omitimos a declaração de parâmetros.
Veja o exemplo a seguir.
valor = lambda: 3 + 2
No caso, a mesma expressão em def ficaria:
def valor ( ):
return 3 + 2
Note que a expressão em lambda resume e sintetiza, logo, é mais rápida
para a definição de expressões e tarefas simples. Caso definamos uma expressão
que não retorna nada, teremos, por exemplo:
bom _ dia = lambda: print('Bom dia')
bom _ dia()
Perceba que, neste caso, estamos utilizando uma função lambda que não
possui retorno e nem parâmetros.
Desenvolvimento com a função lambda
em Python
Nesta seção, iremos apresentar exemplos práticos de desenvolvimento com a
função lambda. Utilizaremos o contexto em que a função lambda é mais
utilizada, isto é, quando funções recebem outras funções como parâmetros
(TONSIG, 2008).
Iremos declarar um array com vários números diferentes. Em seguida,
copiaremos apenas os números pares para um segundo array e, para concluir,
iremos exibi-los.
4 Funções lambda em Python
numeros = [0, 2, 3, 4, 5, 7]
pares = []
for numero in numeros:
if numero % 2 == 0:
[Link](numero)
# Exibe os números
for par in pares:
print(par)
Neste caso, fizemos um laço de repetição para realizar uma filtragem do
array, que armazena todos os números para outro array, que contém somente
os números pares. No caso, o laço de repetição adiciona os números um por um,
analisando se o número é par ou não. Caso o número seja par, ele é adicionado
ao array dos números pares (PRESSMAN, 2011).
A função, então, recebe dois parâmetros: o primeiro é a lista que será
filtrada e, o segundo, a função que realiza o filtro da lista, selecionando os
números pares. Essa função, que funciona como um filtro, possui apenas um
parâmetro e deve retornar um tipo boolean (ou seja, ou é par, ou não é).
Podemos também implementar a função filter com o lambda. Neste
caso, teremos uma lista de números em que a função deverá receber um
número e retornar um valor lógico, fazendo uma comparação que, no caso
da implementação anterior, fizemos pelo trecho numero % 2 == 0. Este
foi o nosso filter. Empregando a função filter em conjunto com a
lambda, teremos:
numeros = [0, 2, 3, 4, 5, 7]
pares = filter(lambda valor: valor % 2 == 0, numeros)
for par in pares:
print(par)
Neste segundo caso, com a função lambda, fizemos com que todo o laço
de repetição tivesse um desvio condicional, utilizando somente uma expressão,
demonstrando, assim, a capacidade de simplificação da função lambda.
Funções lambda em Python 5
Comparar funções lambda e funções def
Vamos comparar dois códigos, um utilizando a função def, e o outro, utili-
zando a função lambda. Como visto, funções lambda funcionam da mesma
forma que funções convencionais, como as funções def.
No nosso exemplo de comparação, iremos estruturar um formulário com
alguns dados inseridos, utilizando a linguagem Python.
users = [
{
"id": 1,
"name": "Allan",
"age": 25,
"profile _ picture": "[Link]
"city": "São Paulo"
},
{
"id": 2,
"name": "Julie",
"age": 29,
"profile _ picture": "[Link]
"city": "Curitiba"
},
{
"id": 3,
"name": "Pedro",
"age": 31,
"profile _ picture": "[Link]
"city": "Rio de Janeiro"
}
]
6 Funções lambda em Python
Agora que temos o formulário, iremos criar uma lista apenas com pessoas
com mais de 25 anos. Com a função def, teremos a implementação a seguir.
# Crie a função que irá filtrar a lista
def users _ over _ 25(user):
return user["age"] > 25
# Filtramos os usuários utilizando o método filter
filtered _ users = filter(users _ over _ 25, users)
list(filtered _ users)
Em seguida, veremos a implementação da mesma lista de forma simpli-
ficada, reduzindo o tamanho do programa, com uma linha só, por meio da
função lambda.
filtered _ users = filter(lambda user: user["age"] > 25, users)
list(filtered _ users)
Podemos perceber que, com a utilização da função lambda, podemos
realizar a redução de código e aumentar a eficiência de implementação e de
execução.
MORE CONTROL Flow Tools. Python Software Foundation, Wilmington, 2019. Disponível
em: [Link] Acesso
em: 4 nov. 2019.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 7. ed. Porto
Alegre: AMGH; Bookman, 2011. 780 p.
SOMMERVILLE, I. Engenharia de software. 8. ed. São Paulo: Pearson Prentice Hall, 2008.
552 p.
TONSIG, S. L. Engenharia de software: análise e projeto de sistemas. 2. ed. Rio de Janeiro:
Ciência Moderna, 2008. 319 p.