Anonüümne funktsioon (lambda)¶
Tavalise funktsiooni deklareerimine algab funktsiooni nime määramisest (Funktsiooni mõiste ja kasutamine).
def name_of_the_func(params):
# Some code here
return [expression]
Sama funktsioon võib olla kirja pandud ilma nimeta, kasutades nn anonüümset funktsiooni, mille võtmesõnaks on lambda
.
Anonüümne funktsioon on funktsioon, millel on alati mingi tagastatav väärtus ja puudub nimi.
lambda params: [expression]
Eeldame, et meil on vaja funktsiooni, mis arvutab ette antud arvu x jaoks antud valemi arvulise väärtuse: x ** 2 + 15 * sqrt(x).
# no pec
# You can also edit the code
from math import *
def solve_some_math(x: int) -> float:
return x ** 2 + 15 * sqrt(x)
print(solve_some_math(9)) # --> 126.0
# Anonymous function equivalent to the function above would be
func = lambda x: x ** 2 + 15 * sqrt(x)
print(func(9)) # --> 126.0
Või näiteks tahame koostada funktsiooni, mis võtab ette mingi sõne (Sõne (string)) ja tagastab sama sõne, kuid esimene täht on asendatud viimase tähega, ja viimane esimesega. Sõne peab seetõttu koosnema vähemalt kahest tähest.
Meie lambda
näeks sel juhul välja selline:
lambda
word: [ perform charswap ] if
[ condition ] else
[ return something else ]
# If given word length is greater than one --> if len(word) > 1
# Perform char swap --> word[len(word) - 1] (last char) + word[1:len(word) - 1] (word body) + word[0] (first char)
# Else return initial word
func = lambda word: word[len(word) - 1] + word[1:len(word) - 1] + word[0] if len(word) > 1 else word
print(func("word")) # --> dorw
print(func("Lambda")) # --> aambdL
print(func("")) # --> ""
print(func("a")) # --> a
# The trivial representation of this algorithm would be
def char_swap(word: str) -> str:
if len(word) > 1:
return word[len(word) - 1] + word[1:len(word) - 1] + word[0]
return word
Nõuanne
Aga anonüümse funktsiooni kasutamine sellistes näidetes väga mõttekas ei ole, kuna antud juhtudel ei ole vahet,
kas kasutada tavalist või lambda
funktsiooni (mõlemad võtavad sama palju ruumi ja mõlemad on sama lihtsad).
Ikkagi mõnedel juhtudel teeb lambda
funktsioonide kasutamine koodi kirjutamise lihtsamaks ja kiiremaks.
Tavaliselt kasutatakse seda koos sisseehitatud meetoditega map()
, filter()
ja reduce()
.
Neid nimetatakse funktsionaalse programmeerimise elementideks.
# Trivial solution would be
def change_element(elements_list):
result = []
for word in elements_list:
if word == "is":
result.append("=")
else:
result.append(word)
return " ".join(result)
print(change_element(["Clean", "code", "is", "good", "code"])) # --> Clean code = good code
# Or using the built-in replace() method
print(" ".join(input_list).replace("is", "=")) # --> Clean code = good code