Manual
do
Maker
.
com
O filho de um querido amigo começou agora a aprender Python. Apesar de estar no início e ainda há todo um caminho pela frente, me dá comichão ver algo que pode ficar mais elegante disposto de uma maneira longe do ideal. Orgulhosamente, tenho dado algumas dicas a ele e resolvi dispor uma introdução "bem" básica sobre lambda em Python.
Se está procurando por funções lambda em C++, já escrevi alguns artigos sobre o tema.
Já escrevi algo mais simples ainda, usando lambda em MicroPython. Nesse artigo continua sendo introdutório, mas com um exemplo de melhoria real.
Basicamente, a tarefa era pegar uma entrada do usuário pelo console, com input, que seria o número a aplicar a tabuada. Em PC, utilizamos:
n = input('Digite um numero: ')
E então fazemos a operação. Sem a utilização de laços, o Eric fez assim, inicialmente:
E foi apenas até o 6. Daí ele me perguntou se havia uma forma de deixar "visualmente mais limpo". Bem, consideremos que não é apenas uma questão de deixar limpo; como está, o c ódigo é inflexível. E se quiséssemos a tabuada de 1 à 100? Então exemplifiquei com lambda e discorri sobre os recursos utilizados, dispostos nesse outro artigo de lambda com Python.
Repare que no código do Eric, ele converteu imediatamente a entrada do usuário para int, para que pudesse ser tratado como número ao fazer a operação. Volto nesse tema mais adiante.
Em substituição à segunda linha de código, minha sugestão foi o uso de lambda, desse modo:
resultado = list(map(lambda x: x*n,list(range(1,11))))
Lembrando que n é a entrada do usuário. Executando dentro do bpython, invés de pegar a entrada do usuário, criei uma variável para testar, como se fosse entrada do usuário:
Quando a lambda retorna mais de um valor, usamos a função map. Então usamos a lista:
list(map(lambda))
Invés de escrever cada um dos multiplicadores da tabuada, usamos a função range. Se fizermos:
range(10)
O resultado será números de 0 à 9. Para iniciar em 1 e terminar em 10, usamos:
range(1,11)
A condição da lambda foi chamada de x. Para cada item da lista gerada por range, x é multiplicado pelo item e ao final é retornada a lista de resultados. Entendendo o conceito, a operação fica muito mais simples, certo?
Essa não é a única forma de se usar lambda em Python. Mesmo que não saiba inglês, tem um site que é uma excelente referência em Python e tem algumas variações do uso de lambda. Dê uma conferida nos exemplos. Inicialmente é difícil imaginar seu uso sem uma aplicação em vista, mas considerando o exemplo prático desse artigo, provavelmente fará mais sentido agora.
Programar para microcontroladores é muito menos problemático que interagir com seres humanos. No exemplo, é esperado veementemente que o usuário entrará com um número. E se ele inserir uma letra? - Nesse caso, é bom garantir que a entrada do usuário foi correta:
import sys
n = input('Digite um numero: ')
if type(n) is str: #vindo por input, sempre será
if n.isdigit():
resultado = list(map(lambda x: x*int(n),list(range(1,11))))
else:
print("Entre com um valor numerico! Saindo...")
sys.exit(0)
print("Resultado da tabuada:")
print(resultado)
Assim garantimos que não estamos multiplicando um caractere invés de um número.
Nesse artigo ficamos apenas nisso, mas se quiser ver mais, tem o meu artigo usando lambda no MicroPython, citado lá em cima, além do artigo em inglês que sugeri.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.