W Pythonie 2.6 chcę zrobić:
f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception
To oczywiście nie jest składnia. Czy to możliwe, aby wykonują if
w lambda
a jeśli tak, w jaki sposób to zrobić?
dzięki
python
lambda
python-2.6
Chłopak
źródło
źródło
Odpowiedzi:
Składnia, której szukasz:
Ale nie możesz używać
print
aniraise
w lambda.źródło
if
w lambda?” nie „jaki jest najlepszy sposób na zapisanie lambda, które zwraca True, jeśli liczba jest parzysta?”dlaczego po prostu nie zdefiniujesz funkcji?
naprawdę nie ma uzasadnienia dla zastosowania lambda w tym przypadku.
źródło
print
nie jest jeszcze funkcją 2.6. :)def
- jest ogólnie bardzo złym pomysłem (tm). Wystarczy użyćdef
tak zwykłych śmiertelnych programistów, aby mogli go czytać, interpretować, rozumieć i utrzymywać.Prawdopodobnie najgorsza linia pytona, jaką do tej pory napisałem:
Jeśli x == 2 drukujesz,
jeśli x! = 2 podbijesz.
źródło
Możesz łatwo podnieść wyjątek w lambda, jeśli naprawdę tego chcesz.
Czy to dobry pomysł? Mój instynkt generalnie polega na tym, aby pomijać raportowanie błędów w lambdas; niech ma wartość Brak i podnosi błąd w wywołującym. Nie sądzę jednak, aby było to z natury złe - uważam, że sama składnia „y if x else z” jest gorsza - po prostu upewnij się, że nie próbujesz zbytnio wpychać ciała lambda.
źródło
x = RaiseValueErrorOnNone(x)
, znowu, w zależności od przypadku.Lambdy w Pythonie są dość restrykcyjne w odniesieniu do tego, co wolno ci używać. W szczególności, nie można mieć żadnych słów kluczowych (z wyjątkiem operatorów podoba
and
,not
,or
itp) w organizmie.Więc nie ma mowy, żebyś użył lambda na swój przykład (bo nie możesz użyć
raise
), ale jeśli chcesz zgodzić się na to ... Możesz użyć:źródło
uwaga: możesz użyć kilku innych ... jeśli w definicji lambda znajdują się wyrażenia:
źródło
Jeśli nadal chcesz drukować, możesz zaimportować przyszły moduł
źródło
Możesz także użyć operatorów logicznych, aby mieć coś w rodzaju warunkowego
Możesz dowiedzieć się więcej o operatorach logicznych tutaj
źródło
if
składnia jest zawsze preferowana. Oczywisty sposób sprawdzania warunków.if
oświadczenia, więc znalazłem ten nieoczywisty sposób.czego dokładnie potrzebujesz
teraz wywołaj funkcję tak, jak potrzebujesz
źródło
Ten fragment powinien pomóc:
źródło
Poniższy przykładowy kod działa dla mnie. Nie jestem pewien, czy odnosi się to bezpośrednio do tego pytania, ale mam nadzieję, że pomoże w niektórych innych przypadkach.
źródło
Spróbuj:
Na zewnątrz:
źródło
Prostym sposobem na wykonanie instrukcji if in lambda jest użycie listy.
Nie możesz zgłosić wyjątku w lambda, ale w Pythonie 3.x jest to sposób na zrobienie czegoś zbliżonego do twojego przykładu:
Inny przykład:
zwraca 1, jeśli M w przeciwnym razie 0
źródło