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