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 xlub 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 _:Truejest podobna do pisania:
def a(_):
return True
Tworzy funkcję o nazwie az parametrem wejściowym _i zwraca True. Można by było równie łatwo napisać a = lambda x:True, xzamiast 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 winklerrrnapisano, „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ą lambdasłowa kluczowego zamiast słowa, def są funkcje, które są szczególnie krótkie i proste. Zwróć uwagę, że lambdadefinicja zazwyczaj mieści się w jednym wierszu, podczas gdy trudno jest zrobić to samo z instrukcją def. Kolejny powód, aby użyć lambdazamiast defsf, 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**2nie 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 lambdazamiast defi _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