Expresii lambda
Expresiile lambda în limbajul Python reprezintă funcții anonime mici, care sunt definite cu ajutorul operatorului lambda. Definiția formală a unei expresii lambda:
lambda [parametri] : instrucțiune
Să definim cea mai simplă expresie lambda:
message = lambda: print("hello")
message() # hello
Aici, expresia lambda este atribuită variabilei message. Această expresie lambda nu are parametri, nu returnează nimic și doar afișează șirul "hello" pe consolă. Și prin intermediul variabilei message putem apela această expresie lambda ca o funcție obișnuită. De fapt, este echivalentă cu următoarea funcție:
def message():
print("hello")
Dacă expresia lambda are parametri, aceștia sunt definiți după cuvântul cheie lambda. Dacă expresia lambda returnează un rezultat, acesta este specificat după două puncte. De exemplu, să definim o expresie lambda care returnează pătratul unui număr:
square = lambda n: n * n
print(square(4)) # 16
print(square(5)) # 25
În acest caz, expresia lambda acceptă un parametru - n. În dreapta celor două puncte este valoarea returnată - n * n. Această expresie lambda este echivalentă cu următoarea funcție:
def square2(n): return n * n
În mod similar, putem crea expresii lambda care acceptă mai mulți parametri:
sum = lambda a, b: a + b
print(sum(4, 5)) # 9
print(sum(5, 6)) # 11
Deși expresiile lambda permit reducerea ușoară a definițiilor funcțiilor, ele sunt totuși limitate la a executa doar o singură expresie. Cu toate acestea, ele pot fi destul de utile în cazurile în care este necesar să folosim o funcție pentru a fi transmisă ca parametru sau returnată într-o altă funcție. De exemplu, transmiterea unei expresii lambda ca parametru:
def do_operation(a, b, operation):
result = operation(a, b)
print(f"result = {result}")
do_operation(5, 4, lambda a, b: a + b) # result = 9
do_operation(5, 4, lambda a, b: a * b) # result = 20
În acest caz, nu este necesar să definim funcții pentru a le transmite ca parametru, așa cum am făcut în articolul anterior.
Același lucru este valabil și pentru returnarea expresiilor lambda din funcții:
def select_operation(choice):
if choice == 1:
return lambda a, b: a + b
elif choice == 2:
return lambda a, b: a - b
else:
return lambda a, b: a * b
operation = select_operation(1) # operation = sum
print(operation(10, 6)) # 16
operation = select_operation(2) # operation = subtract
print(operation(10, 6)) # 4
operation = select_operation(3) # operation = multiply
print(operation(10, 6)) # 60