Poniżej znajduje się odpowiedni wiersz kodu:
a = lambda _:True
Tworzy funkcję mającą jeden parametr wejściowy: _
. Podkreślenie to dość dziwny wybór nazwy zmiennej, ale to tylko nazwa zmiennej. Możesz używać _
wszędzie, nawet jeśli nie używasz funkcji lambda. Na przykład zamiast ....
my_var = 5
print(my_var)
Możesz napisać:
_ = 5
print(_)
Był jednak powód, który _
został użyty jako nazwa nazwy parametru zamiast czegoś w rodzaju x
lub input
. Za chwilę do tego dojdziemy.
Po pierwsze, musimy wiedzieć, że słowo kluczowe lambda konstruuje funkcję podobną do def
, ale o innej składni. Definicja funkcji lambda a = lambda _:True
jest podobna do pisania:
def a(_):
return True
Tworzy funkcję o nazwie a
z parametrem wejściowym _
i zwraca True
. Można by było równie łatwo napisać a = lambda x:True
, x
zamiast podkreślenia. Jednak konwencja jest taka, aby używać _
jako nazwy zmiennej, gdy nie zamierzamy jej używać. Rozważ następujące:
for _ in range(1, 11):
print('pear')
Zauważ, że indeks pętli nigdy nie jest używany w treści pętli. Chcemy po prostu, aby pętla wykonywała określoną liczbę razy. Jak winklerrr
napisano, „nazwa zmiennej _
jest [...] jak„ zmienna do wyrzucenia ”, po prostu symbol zastępczy, który nie jest użyteczny”.
Podobnie w przypadku `` a = lambda x: True ''
parametr wejściowy nie jest używany w treści funkcji. Tak naprawdę nie ma znaczenia, jaki jest argument wejściowy, o ile istnieje. Autor tej funkcji lambda napisał _
zamiast czegoś podobnego x
, aby wskazać, że zmienna nie zostanie użyta.
Zauważ, że lambda nie ma argumentu; Więc piszę
a()
, spowoduje błąd.
Jeśli chcesz lambda bez argumentu, napisz coś takiego:
bar = lambda: True
Teraz dzwonienie bar()
bez argumentów będzie działać dobrze. Lambda, która nie przyjmuje argumentów, nie musi zawsze zwracać tę samą wartość:
import random
process_fruit = lambda : random.random()
Powyższa funkcja lambda jest bardziej złożona niż coś, co zawsze zwraca tę samą stałą.
Jednym z powodów, dla których programiści czasami używają lambda
słowa kluczowego zamiast słowa, def
są funkcje, które są szczególnie krótkie i proste. Zwróć uwagę, że lambda
definicja zazwyczaj mieści się w jednym wierszu, podczas gdy trudno jest zrobić to samo z instrukcją def. Kolejny powód, aby użyć lambda
zamiast def
sf, gdy funkcja nie będzie ponownie używana. Jeśli nie chcemy później ponownie wywoływać funkcji, nie ma potrzeby nadawania jej nazwy. Weźmy na przykład pod uwagę następujący kod:
def apply_to_each (transform, in_container): out_container = list () for idx, item in enumerate (container, 0): out_container [idx] = transform (item) return out_container
Teraz wykonujemy następujące wezwanie:
squares = apply_to_each(lambda x: x**2 range(0, 101))
Zauważ, że lambda x: x**2
nie ma etykiety. Dzieje się tak, ponieważ prawdopodobnie nie zadzwonimy do tego ponownie później, było to coś krótkiego i prostego, czego potrzebowaliśmy tymczasowo.
Fakt, że funkcjom lambda nie trzeba nadawać nazwy, jest źródłem innej nazwy, która je opisuje: „funkcje anonimowe”.
Zauważ również, że instrukcje lambda są jak wywołanie funkcji, ponieważ zwracają referencję do funkcji, którą tworzą. Następujące jest nielegalne:
apply_to_each(def foo(x): x**2 , range(0, 101))
Podczas gdy apply_to_each(lambda x: x**2 range(0, 101))
jest w porządku.
Tak więc używamy lambda
zamiast def
i _
zamiast długiej nazwy zmiennej, gdy chcemy czegoś krótkiego, słodkiego i prawdopodobnie nie będziemy chcieli użyć go później.
lambda : True