https://docs.python.org/3/reference/expressions.html#lambda
Lambda jest wyrażeniem (lambda expression), a nie instrukcją, dzięki czemu może pojawić się w miejscu niedostępnym dla instrukcji def. Lambda zwraca obiekt funkcji, do którego można opcjonalnie przypisać nazwę. Ciałem lambda jest pojedyncze wyrażenie, a nie blok instrukcji. Przykładowo lambda nie może zawierać print [Py2], bo to jest instrukcja (podobnie yield, return).
# Do funkcji lambda można przyporządkować nazwę. func1 = lambda x, y, z: x + y + z print(func1(2, 3, 4)) # 9 def func2(x, y, z): return x + y + z # równoważna funkcja print(func2(2, 3, 4)) # 9 # Formalnie Python widzi różnicę między func1 i func2, co można sprawdzić # przez help(func1) i help(func2).
# W argumentach lambda można używać argumentów domyślnych. func3 = (lambda x=0, y=0, z=0: x + y + z) print(func3(4, 5))
# Lambda można stosować w funkcji map(). map(lambda x: 2*x+1, range(9)) [2*x+1 for x in range(9)] # lista składana
# Z lambda można budować listę lub słownik. action = { # wcięcia dla czytelności "jeden": lambda x: x, "dwa": lambda x: x**2, "trzy": lambda x: x**3, } print(action["dwa"](10)) # pow(10, 2) = 100 powers = [ # wcięcia dla czytelności lambda x : 1, lambda x: x, lambda x: pow(x, 2), lambda x: pow(x, 3), ] print(powers[2](3)) # pow(3, 2) = 9
# Zastosowanie logiki wyboru. lambda_abs = lambda x: -x if x < 0 else x lambda_min = lambda x, y: x if x < y else y lambda_max = lambda x, y: x if x > y else y
# Zastosowanie lambda do sortowania. number_list.sort(reverse=True) number_list.sort(key=lambda x: -x) pair_list.sort(key=lambda t: abs(t[0]) + abs(t[1])) # metryka taksówkowa pair_list.sort(key=lambda t: (-t[0], t[1])) # Sortujemy malejąco ze względu na t[0]. # Jeżeli t[0] są równe, to sortujemy rosnąco ze względu na t[1]. # UWAGA To nie jest to samo, co dwa kolejne sortowania # pair_list.sort(key=lambda t: -t[0]) # pair_list.sort(key=lambda t: t[1])