Lambda-udtryk i Python

Lambda-udtryk

Lambda-udtryk bruges ideelt, når vi har brug for at gøre noget simpelt og er mere interesserede i at få jobbet gjort hurtigt i stedet for at navngive funktionen formelt. Lambda-udtryk er også kendt som anonyme funktioner.

Lambda-udtryk i Python er en kort vej til at erklære små og anonyme funktioner (det er ikke nødvendigt at angive et navn til lambda-funktioner).

Lambda-funktioner opfører sig ligesom almindelige funktioner, der er angivet med defnøgleordet. De er nyttige, når du vil definere en lille funktion på en kortfattet måde. De kan kun indeholde ét udtryk, så de er ikke bedst egnede til funktioner med kontrol-flow-sætninger.

Syntaks for en Lambda-funktion

lambda arguments: expression

Lambda-funktioner kan have et vilkårligt antal argumenter, men kun et udtryk.

Eksempel kode

# 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

I ovenstående lambda-eksempel lambda x: x ** 2giver et anonymt funktionsobjekt, som kan knyttes til ethvert navn. Så vi forbandt funktionsobjektet med square. Så fra nu af kan vi kalde squareobjektet som enhver traditionel funktion, for eksempelsquare(10)

Eksempler på lambdafunktioner

Nybegynder

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

Mellemliggende

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

Kompleks

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

Brugssag

Lad os sige, at du vil filtrere ulige tal fra a list. Du kan bruge en forløkke:

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]

Eller du kan skrive dette som en one-liner med listeforståelser:

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

Men du kan blive fristet til at bruge den indbyggede filterfunktion. Hvorfor? Det første eksempel er lidt for detaljeret, og one-liner kan være sværere at forstå. Men filtertilbyder det bedste fra begge ord. Desuden er de indbyggede funktioner normalt hurtigere.

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]

BEMÆRK: i Python 3 indbyggede funktioner returnerer generatorobjekter, så du skal ringe list. I Python 2 returnerer de derimod a list, tupleeller string.

Hvad skete der? Du bad om filterat tage hvert element ind my_listog anvende lambda-udtryk. De værdier, der returneres False, filtreres fra.

Mere information:

  • Officielle Dokumenter