Expresii Lambda

Expresiile Lambda sunt utilizate în mod ideal atunci când trebuie să facem ceva simplu și suntem mai interesați să facem treaba rapid, mai degrabă decât să numim formal funcția. Expresiile Lambda sunt, de asemenea, cunoscute ca funcții anonime.

Expresiile Lambda din Python reprezintă o modalitate scurtă de a declara funcții mici și anonime (nu este necesar să furnizați un nume pentru funcțiile lambda).

Funcțiile Lambda se comportă exact ca funcțiile obișnuite declarate cu def cuvânt cheie. Acestea sunt utile când doriți să definiți o funcție mică într-un mod concis. Ele pot conține o singură expresie, deci nu sunt cele mai potrivite pentru funcții cu instrucțiuni control-flow.

Sintaxa unei funcții Lambda

lambda arguments: expression

Funcțiile Lambda pot avea orice număr de argumente, dar numai o singură expresie.

Exemplu de cod

# Lambda function to calculate square of a number
square = lambda x: x ** 2
print(square(3)) # Output: 9

# Traditional function to calculate square of a number
def square1(num):
  return num ** 2
print(square(5)) # Output: 25

În exemplul lambda de mai sus, lambda x: x ** 2 produce un obiect funcție anonim care poate fi asociat cu orice nume. Deci, am asociat obiectul funcțional cu square. Deci, de acum înainte putem apela la square obiect ca orice funcție tradițională, de exemplu square(10)

Exemple de funcții lambda

Începător

lambda_func = lambda x: x**2 # Function that takes an integer and returns its square
lambda_func(3) # Returns 9

Intermediar

lambda_func = lambda x: True if x**2 >= 10 else False
lambda_func(3) # Returns False
lambda_func(4) # Returns True

Complex

my_dict = {"A": 1, "B": 2, "C": 3}
sorted(my_dict, key=lambda x: my_dict[x]%3) # Returns ['C', 'A', 'B']

Utilizare caz

Să presupunem că doriți să filtrați numerele impare dintr-un list. Ai putea folosi un for buclă:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered = []

for num in my_list:
     if num % 2 != 0:
         filtered.append(num)

print(filtered)      # Python 2: print filtered
# [1, 3, 5, 7, 9]

Sau ați putea scrie acest lucru ca un singur liner cu listă-comprehensions:

filtered = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] if x % 2 != 0]

Dar s-ar putea să fiți tentat să folosiți dispozitivul încorporat filter funcţie. De ce? Primul exemplu este puțin prea amănunțit și un singur liner poate fi mai greu de înțeles. Dar filter oferă cele mai bune cuvinte. Mai mult, funcțiile încorporate sunt de obicei mai rapide.

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

filtered = filter(lambda x: x % 2 != 0, my_list)

list(filtered)
# [1, 3, 5, 7, 9]

NOTĂ: în Python 3 funcțiile încorporate returnează obiecte generatoare, deci trebuie să apelați list. În Python 2, pe de altă parte, returnează un list, tuplesau string.

Deci ce s-a întâmplat? Ai spus filter să ia fiecare element în my_list și aplicați expresiile lambda. Valorile care revin False sunt filtrate.

Mai multe informatii: