28 de julho de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Funções lambda no MicroPython

lambda no micropython | regex no MicroPython

Logo que saiu uma versão do MicroPython pra ESP8266, escrevi uma série de artigos mostrando a compilação e uso em algumas IDEs. Depois dessa série não usei mais porque gostava de usar o firmware Sming, do qual também escrevi uma série. Agora veremos a simplicidade de uso de funções lambda no MicroPython, mas usando a RP Pico, que tem sido a nova motivação para utilizar MicroPython, sendo indubitavelmente a placa mais fácil para quem quer iniciar em eletrônica digital e embarcados. Vamos aos exemplos.

Formato da função lambda no MicroPython

O propósito das funções lambda no MicroPython acaba sendo reduzir o número de linhas de código para soluções simples, que exigiriam mais código, na declaração de uma função comum. Porém, para fazer uso dessa simplicidade precisamos ter em mente o formato da declaração.

teste = lambda x,y : x**y
teste(2,3)

O objeto da função lambda se chamará teste. Após o sinal de igualdade temos a palavra chave lambda, seguida pelos parâmetros, que podem ser variáveis. Então temos os dois pontos seguido pela expressão que resultará no retorno.

Claro que está simples demais essa declaração. Poderíamos simplesmente executar x**y sem função nenhuma. Mas com essa estrutura básica em mente, podemos evoluir para composições mais elaboradas. Suponhamos que você já tem uma função (A) declarada que faz algum tipo de tratamento e retorna um valor. Daí surge a necessidade de usar o resultado dessa função para uma nova conta. Teríamos que declarar a função (A), então uma função (B), então declarar um fluxo lógico para obter o resultado. Invés de escrever um monte de linhas, algo mais simples seria:

def primeiro(x):
    return x*2

teste = lambda a,b : a+primeiro(b)

teste(1,2)

Lembre-se de que esse é outro exemplo simples de uso, para entender o conceito de funções lambda; chamamos uma função que retorna o valor que será o parâmetro da função lambda.

Map e lambda

É muito comum em Python usar listas e iterar em um loop. Essas listas nem sempre (ou quase nunca) são declaradas previamente, mas alimentadas durante o fluxo do programa. No exemplo será utilizada uma lista previamente criada:

lista = [2,4,6,8,10]
for i in lista:
    print(i*2)

Ok, podemos iterar dessa maneira, então tratar o valor da lista como desejado, inclusive criando uma nova lista para armazenar os valores. Vamos criar essa nova lista para armazenar os valores:

lista2 = []

for i in lista:
    lista2.append(i*2)

Invés de usarmos essa série de linhas, podemos resumir tudo a uma linha, usando map e lambda:

lista  = [2,4,6,8,10]
dobros = map(lambda param : param * 2, lista)

print(list(dobros)) 

Ou seja, apenas 1 linha conseguimos manipular os valores de uma lista de uma maneira bastante eficiente.

Juntando apenas esses dois recursos temos um monte de possibilidades, que farão nosso código menor, mais claro e mais eficiente. Experimente!

Vídeo

Iniciei uma série sobre MicroPython com a Raspberry Pi Pico, mas grande parte serve também para ESP8266 e ESP32 usando esse firmware. Se não tem ainda a RP Pico mas gostaria de experimentar MicroPython, digite micropython aí na caixa de pesquisa e siga um dos tutoriais para ESP, depois é só acompanhar os vídeos dessa série. E se não é inscrito, inscreva-se em nosso canal no Youtube, ok?

Onde comprar a Raspberry Pi Pico no Brasil?

Sugiro fortemente a Robocore, que é uma empresa que vai além de vender; ela cria produtos, aliás, com excelente qualidade, como o Falcon, do qual já escrevi alguns artigos. Mas tem também as belíssimas bombas peristálticas, da qual já fiz um artigo bem legal, que é um misturador de cores CMYK. Enfim, o link para a RP Pico é esse.

Revisão: Ricardo Amaral de Andrade