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
, tuple
sau 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.