Python - Guia prático para Iniciantes
  • Introdução
  • Você deveria aprender Python
  • Começando com Python
  • Desvios condicionais, fazendo seu programa tomar decisões
  • Valores None, Strings e Listas
  • Listas
  • Laços de Repetição - I
  • Laços de Repetição - II
  • Dicionários
  • Modularização de código com Funções
  • Expressões Lambda
  • Conclusão
  • Resolução dos exercícios
Powered by GitBook
On this page
  • Utilização
  • Vamos Praticar

Was this helpful?

Expressões Lambda

Este é o último capítulo para introdução à programação utilizando Python, vamos fechar o aprendizado com um tipo diferente de função: as expressões lambdas!

Para compreender este post é essencial que você tenha compreendido antes o assunto do capítulo anterior: funções.

Todas as características de uma função lambda são muito parecidas com as funções comuns que já vimos, com exceção de duas coisas: elas 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; e elas são funções de uma linha, que funcionam como se houvesse a instrução return antes do comando.

def soma(numero1, numero2):
    return numero1 + numero2

A função acima é uma função de soma normal, por ser uma função de uma linha podemos transformá-la em uma função lambda, ou em uma expressão lambda. Para isso, utilize o comando lambda conforme código:

soma_lambda = lambda numero1, numero2: numero1 + numero2

Notem que a sintaxe é um pouco diferente, utilizamos a palavra reservada lambda para declarar o início da expressão, depois disso, inserimos os parâmetros separados por vírgula. Por fim, colocamos o corpo da expressão.

Lembrando que o corpo da expressão sempre deve conter apenas uma linha de comando e ela funciona como se houvesse uma instrução de return antes dessa linha.

Portanto as duas funções de soma são definições diferentes para a mesma função:

print(soma(1,2))        # -> 3
print(soma_lambda(1,2)) # -> 3

Também podemos ter uma função lambda sem parâmetros, quando for o caso, basta omitirmos a declaração de parâmetros normalmente:

obter_valor = lambda: 3 + 2

Na prática essa função não faz tanto sentido, mas é um bom exemplo para entendermos o que está acontecendo. Nesse caso criamos uma função chamada obter_valor que sempre retorna o número cinco. A definição padrão desta função ficaria da seguinte maneira:

def obter_valor():
    return 3 + 2

Perceba que um dos pontos fortes de expressões lambda é sua síntese, ela são uma forma rápida de definir funções simples.

Mas e para funções sem retorno? -Nenhum problema!

ola = lambda: print('Olá mundo')
ola() # -> Olá mundo

Veja que estamos utilizando uma função lambda que não possui retorno e nem parâmetros! Mas tudo funcionará corretamente.

Talvez você estranhe um pouco, afinal, eu havia escrito antes que as expressões lambda funcionam como se houvesse um return antes da instrução e a função print não gera retornos. Então como ele entende?

Na prática você pode obter o valor de retorno da função print, mas ele será um valor do tipo None! Portanto, a mesma sintaxe de lambda continua funcionando normalmente.

Utilização

Ok, entendi o conceito, mas para o que isso serve? Agora vem a parte mais complicada desta lição, existem funções que podem receber outras funções por parâmetro!

Sim, você não leu errado, uma função recebe como parâmetro outra função. Estes são os exemplos onde as expressões lambda são mais utilizadas.

Vamos fazer um exercício utilizando os conceitos que já sabemos e depois refazê-lo utilizando expressões lambda!

Vamos declarar uma lista com diversos números diferentes, depois disso, copiaremos apenas os números pares para uma segunda lista e o exibiremos no console. Tranquilo, certo?

numeros = [0,2,3,4,5,7]
pares = []
for numero in numeros:
    if numero % 2 == 0:
        pares.append(numero)

# Exibe os números
for par in pares:
    print(par)

Utilizamos um laço de repetição para fazer a filtragem da lista que contém todos os números para uma nova lista que contenha somente os números pares.

Neste laço de repetição obtemos os números um por um, verificamos se ele é par ou não e caso seja, adicionamos ele à lista de pares.

Este comportamento de filtro em uma lista é bastante comum, por conta disso, a linguagem oferece um recurso para simplificar esta implementação. Esse recurso é a função filter!

Esta função recebe dois parâmetros: um deles é a lista que vai ser filtrada, claro e o outro parâmetro é a função que realiza o filtro da lista!

Essa função de filtro deve possuir apenas um parâmetro (do mesmo tipo de cada elemento da lista) e deve retornar um boolean.

Dessa forma, todas as listas, de qualquer tipo, podem utilizar a mesma função filter.

No nosso caso, temos uma lista de números, portanto nossa função deve receber um número e retornar um valor lógico, na prática, ela é a mesma comparação que já fizemos na implementação anterior: numero % 2 == 0, veja como fazemos a mesma coisa utilizando o filter:

numeros = [0,2,3,4,5,7]
pares = filter(lambda valor: valor % 2 == 0, numeros)

for par in pares:
    print(par)

Transformamos todo nosso laço de repetição com um desvio condicional em uma única instrução! Legal né?

O filter não é a única função capaz de realizar este tipo de operação, mas é um bom exemplo para você entender o poder das expressões lambda!

Vamos Praticar

  1. Faça um programa que escreva "Minha primeira função", esta escrita deve ser realizada a partir da chamada de uma função que foi declarada como uma expressão lambda.

  2. Faça um programa que solicite o nome do usuário e a idade do usuário, depois disso exiba a mensagem: "{nome} possui {idade} anos.". Esta mensagem deve ser escrita em uma função lambda.

  3. Faça um programa que solicite dois números ao usuário e exiba a multiplicação deles. A multiplicação deve ser calculada em uma função lambda.

  4. Faça um programa que solicite cinco números ao usuário, depois disso, exiba apenas os números maiores do que 10. Utilize a função filter para fazer isso.

  5. Faça um programa que solicite dez números ao usuário, depois disso, exiba todos números pares e só então exiba todos os números ímpares. Utilize a função filter para fazer isso.

Atenção

PreviousModularização de código com FunçõesNextConclusão

Last updated 5 years ago

Was this helpful?

É fortemente recomendado que você tente fazer os exercícios antes de ver as respostas. Você pode encontrar as respostas .

aqui