Widziałem ostatnio wielu odpowiedzi za pomocą lambda w kodzie odpowiedzią.

Doceniam różnice między definiowaniem funkcji i za pomocą Lambda.

def add(x): 
    return x + 10

adding = lambda x:x ++ 10

Wiem, że oba zapewni dokładnie ten sam wynik, Lambda nie wymaga też połączenia z zmienną.

O czym jestem zdezorientowany, jest miejsce, w którym byłoby użyteczne użycie lambdy zamiast funkcji?

Czytałem dokumentację itp. I może docenić różnice, ale pod względem sytuacji, w których jeden jest bardziej przydatny niż inny Jestem trochę zakłopotany.

0
Joe Smart 15 sierpień 2014, 17:49

3 odpowiedzi

Najlepsza odpowiedź

lambda Wyrażenia są zwykle używane do definiowania anonimowych funkcji, w których nie ma potrzeby wiązania funkcji do nazwy (globalnej). Na przykład, jeśli wystarczy potrzebować funkcji, aby przejść jako argument key do sorted:

sorted(some_list, key=lambda x: x[2])

Istnieją pewne osoby, które uważają, że wyraźne przypisanie do nazwy dla krótkiej funkcji wygląda lepiej na jednej linii niż niejawny przypisanie wykonywane przez oświadczenie {X0}}, ale to jest czysto oparta oparta na estetyce bez wpływu na rzeczywisty kod.

Największą różnicą między nimi jest to, że def jest oświadczeniem, którego ciało może obejmować dowolny kod Pythona, podczas gdy {X1}} jest wyrażeniem, którego ciało musi być pojedynczym wyrażeniem, który jest domyślnie zwrócony. Biorąc pod uwagę ten ograniczenie, zwykle jest bardziej przydatne do użycia def i wiele sytuacji, w których przydatne jest lambda, są obsługiwane przez inne funkcje.

Chociaż Python uważa za funkcje jako obiekty pierwszej klasy, istnieją stosunkowo niewiele rzeczy, które można w rzeczywistości do z nimi: możesz nazywać do nich i przechowywać do nich odniesienia. Brak innych operacji (takich jak kompozycja lub wniosek o punkt-mędrca-np., h=f+g oznacza, że h(x) = f(x) + g(x) dla wszystkich x). Jeśli operacje były obsługiwane, wówczas będzie więcej zastosowań do wyrażeń , który tworzy obiekty funkcyjne.

1
chepner 15 sierpień 2014, 14:57

Jedna sytuacja, w której Lambda może być preferowana przy użyciu DEF, w której musisz przekazać jednorazową funkcję jako argument, ponieważ można umieścić lambdę bezpośrednio w połączeniu funkcji.

1
Scott Hunter 15 sierpień 2014, 13:54

Lambdas są zazwyczaj używane w programowaniu funkcjonalnym. W Pythonie funkcje Lambda są używane w połączeniu z funkcjonalnymi koncepcjami, takimi jak map, reduce, filter itp

Twoje funkcje dodawania przy użyciu def i lambda wytwarza podobne wyniki. Należy pamiętać, że definicja Lambda nie zawiera instrukcji "Powrót" - zawsze zawiera wyrażenie zwracane. Należy również pamiętać, że można umieścić definicję lambda w dowolnym miejscu funkcji, a nie musisz przypisać go do zmiennej w ogóle.

W nowoczesnym Pythonie, wymieniają wymienianie potrzeby mapy, filtra i podobnych funkcji, a użycie Lambda jest trochę przestarzały.

Czasami bardzo przydatny jest tworzenie nowej funkcji, aby zadzwonić do innego z predefiniowanych argumentów już ustawionych:

def foo(x,y):
  return x*y

Wyobraź sobie, że chcesz naprawić x, aby mieć 5, możesz utworzyć nową funkcję w locie z lambda:

foo_with_fixed_x = lambda y: foo(5,y)

Ale nawet w tym przypadku korzystne jest polegać na module functools (spójrz na functools.partial):

import functools
foo_with_fixed_x = functools.partial(foo, 5)
0
mguijarr 15 sierpień 2014, 14:02