Ламбда изрази в Python

Ламбда изрази

Ламбда изразите се използват в идеалния случай, когато трябва да направим нещо просто и сме по-заинтересовани да свършим работата бързо, а не официално да именуваме функцията. Ламбда изразите са известни и като анонимни функции.

Ламбда изразите в Python са кратък начин за деклариране на малки и анонимни функции (не е необходимо да се предоставя име за ламбда функции).

Ламбда функциите се държат точно като обикновените функции, декларирани с defключовата дума. Те са полезни, когато искате да дефинирате малка функция по кратък начин. Те могат да съдържат само един израз, така че не са най-подходящи за функции с инструкции за контролен поток.

Синтаксис на ламбда функция

lambda arguments: expression

Ламбда функциите могат да имат произволен брой аргументи, но само един израз.

Примерен код

# 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

В горния ламбда пример lambda x: x ** 2дава анонимен функционален обект, който може да бъде свързан с всяко име. И така, свързахме обекта на функция с square. Така че отсега нататък можем да извикаме squareобекта като всяка традиционна функция, напримерsquare(10)

Примери за ламбда функции

Начинаещ

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

Междинен

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

Комплекс

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

Случай за употреба

Да предположим, че искате да филтрирате нечетни числа от a list. Можете да използвате forцикъл:

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]

Или можете да напишете това като едно влагане с разбиране на списъка:

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

Но може да се изкушите да използвате вградената filterфункция. Защо? Първият пример е твърде многословен и еднолинейната линия може да бъде по-трудна за разбиране. Но filterпредлага най-доброто от двете думи. Нещо повече, вградените функции обикновено са по-бързи.

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]

ЗАБЕЛЕЖКА: в Python 3 вградените функции връщат обекти на генератор, така че трябва да се обадите list. В Python 2, от друга страна, те върне list, tupleили string.

И какво стана? Казахте filterда вземете всеки елемент my_listи да приложите ламбда изразите. Стойностите, които се връщат, Falseсе филтрират.

Повече информация:

  • Официални документи