domingo, 6 de agosto de 2017

Expressões lambda ou forma lambda é utilizado para criar Funções anônimas em tempo de execução.

O objeto sem nome criado se comporta como um objeto de função definido com assim:

def <lambda>(arguments):
    return expression

Sintaxe

lambda_expr        ::=  "lambda" [parameter_list]: expression
lambda_expr_nocond ::=  "lambda" [parameter_list]: expression_nocond

Exemplos

Soma simples

def somar0(x, y):
    return x + y

somar1 = (lambda x,y: x+y)

print(somar0(1,2))
print(somar1(1,2))
# 3

Soma multiplos argumentos

def soma(*args):
    return sum(args)

soma1 = lambda *args: sum(args)
print()
print(soma(1,2,3,4,5,6,7,8,9))
print(soma1(1,2,3,4,5,6,7,8,9))
# 45

Calculadora

def calc(op, *valores):
    subtrair = lambda *valores: valores[0] - (valores[1])
    multiplicar = lambda *valores: valores[0] * valores[1]
    dividir = lambda *valores: valores[0] / valores[1]
    exponenciar = lambda *valores: valores[0] ^ valores[1]
    return {
        '+': sum(valores),
        '-': subtrair(*valores),
        '*': multiplicar(*valores),
        '/': dividir(*valores),
        '^': exponenciar(*valores)
    }.get(op, 'Erro!')

print(calc('+', 1,2,3,4))
print(calc('-', 1,2))
print(calc('*', 1,2))
print(calc('/', 1,2))
print(calc('^', 1,2))

Ordenação de lista por definição de campo

from string import ascii_lowercase

print()
d = [(y, x) for x,y in enumerate(reversed(ascii_lowercase), 1)]
print(d)
print(sorted(d, key=lambda x: x[0]))
# [('z', 1), ('y', 2), ('x', 3), ('w', 4), ('v', 5), ('u', 6), ('t', 7), ('s', 8), ('r', 9), ('q', 10), ('p', 11), ('o', 12), ('n', 13), ('m', 14), ('l', 15), ('k', 16), ('j', 17), ('i', 18), ('h', 19), ('g', 20), ('f', 21), ('e', 22), ('d', 23), ('c', 24), ('b', 25), ('a', 26)]
# [('a', 26), ('b', 25), ('c', 24), ('d', 23), ('e', 22), ('f', 21), ('g', 20), ('h', 19), ('i', 18), ('j', 17), ('k', 16), ('l', 15), ('m', 14), ('n', 13), ('o', 12), ('p', 11), ('q', 10), ('r', 9), ('s', 8), ('t', 7), ('u', 6), ('v', 5), ('w', 4), ('x', 3), ('y', 2), ('z', 1)]

Ordenação de dicionário por chave ou valor

from string import ascii_lowercase

print()
e = {y:x for x,y in enumerate(reversed(ascii_lowercase), 1)}
print(e)
print(sorted(d, key=lambda x: x[0]))
print(sorted(d, key=lambda x: x[1]))
# {'m': 14, 's': 8, 't': 7, 'e': 22, 'o': 12, 'q': 10, 'l': 15, 'd': 23, 'v': 5, 'r': 9, 'i': 18, 'w': 4, 'h': 19, 'f': 21, 'j': 17, 'c': 24, 'y': 2, 'u': 6, 'p': 11, 'k': 16, 'a': 26, 'g': 20, 'n': 13, 'z': 1, 'x': 3, 'b': 25}
# [('a', 26), ('b', 25), ('c', 24), ('d', 23), ('e', 22), ('f', 21), ('g', 20), ('h', 19), ('i', 18), ('j', 17), ('k', 16), ('l', 15), ('m', 14), ('n', 13), ('o', 12), ('p', 11), ('q', 10), ('r', 9), ('s', 8), ('t', 7), ('u', 6), ('v', 5), ('w', 4), ('x', 3), ('y', 2), ('z', 1)]
# [('z', 1), ('y', 2), ('x', 3), ('w', 4), ('v', 5), ('u', 6), ('t', 7), ('s', 8), ('r', 9), ('q', 10), ('p', 11), ('o', 12), ('n', 13), ('m', 14), ('l', 15), ('k', 16), ('j', 17), ('i', 18), ('h', 19), ('g', 20), ('f', 21), ('e', 22), ('d', 23), ('c', 24), ('b', 25), ('a', 26)]

Referências

https://docs.python.org/3/reference/expressions.html

0 comentários: