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.
3 odpowiedzi
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.
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.
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)
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.