Lambda izrazi u Pythonu

Lambda izrazi

Lambda izrazi idealno se koriste kada trebamo učiniti nešto jednostavno i više nas zanima brzo obavljanje posla, a ne formalno imenovanje funkcije. Lambda izrazi poznati su i kao anonimne funkcije.

Lambda izrazi u Pythonu kratki su način deklariranja malih i anonimnih funkcija (nije potrebno navesti naziv za lambda funkcije).

Lambda funkcije ponašaju se poput uobičajenih funkcija deklariranih s defključnom riječi. Dobro dođu kada želite sažeto definirati malu funkciju. Mogu sadržavati samo jedan izraz, tako da nisu najprikladniji za funkcije s izrazima kontrolnog toka.

Sintaksa Lambda funkcije

lambda arguments: expression

Lambda funkcije mogu imati bilo koji broj argumenata, ali samo jedan izraz.

Primjer koda

# 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

U gornjem primjeru lambda lambda x: x ** 2daje anonimni objekt funkcije koji se može pridružiti bilo kojem imenu. Dakle, pridružili smo objekt funkcije s square. Dakle, od sada squareobjekt možemo nazivati poput bilo koje tradicionalne funkcije, na primjersquare(10)

Primjeri lambda funkcija

Početnik

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

Srednji

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']

Slučaj upotrebe

Recimo da želite filtrirati neparne brojeve iz a list. Možete koristiti forpetlju:

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]

Ili biste ovo mogli napisati kao jednu liniju s razumijevanjem popisa:

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

Ali možda ćete doći u napast da koristite ugrađenu filterfunkciju. Zašto? Prvi je primjer previše opširan i jednoslojno je možda teže razumjeti. Ali filternudi najbolje od obje riječi. Štoviše, ugrađene funkcije su obično brže.

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]

NAPOMENA: u Python 3 ugrađene funkcije vraćaju generatorske objekte, tako da morate nazvati list. U Python 2, s druge strane, oni vraćaju list, tupleili string.

Dakle, što se dogodilo? Rekli ste filterda unesete svaki element my_listi primijenite lambda izraze. Vrijednosti koje se vraćaju Falsefiltriraju se.

Više informacija:

  • Službeni dokumenti