Przeczytałem poniższe linki, ale nie dotyczą one mojego pytania.
Czy Python ma trójskładnikowy operator warunkowy? (pytanie dotyczy skondensowania instrukcji if-else do jednej linii)
Czy istnieje prostszy sposób na napisanie instrukcji if-elif-else tak, aby mieściła się w jednym wierszu?
Na przykład,
if expression1:
statement1
elif expression2:
statement2
else:
statement3
Lub przykład ze świata rzeczywistego:
if i > 100:
x = 2
elif i < 100:
x = 1
else:
x = 0
Po prostu czuję, że gdyby powyższy przykład można było zapisać w następujący sposób, mógłby wyglądać na bardziej zwięzły.
x=2 if i>100 elif i<100 1 else 0 [WRONG]
źródło
a = 1 if i < 100 else (2 if i > 100 else 0)
(Nie przetestowano, ale myślę, że powinno działać)Jeśli potrzebujesz tylko różnych wyrażeń dla różnych przypadków, może to działać dla Ciebie:
Na przykład:
źródło
"pos"
to nie stwierdzenie, że jest to wyrażenie.Po prostu umieść kolejną klauzulę if w instrukcji else. Ale to nie sprawia, że wygląda ładniej.
źródło
Pomimo kilku innych odpowiedzi: TAK, jest to możliwe :
przekłada się na następującą jedną linijkę:
w rzeczywistości możesz zagnieżdżać je do nieskończoności. Cieszyć się ;)
źródło
Opcjonalnie możesz faktycznie użyć
get
metodydict
:Nie potrzebujesz tej
get
metody, jeśli jeden z kluczy ma gwarantowaną wartośćTrue
:Co najwyżej jeden z kluczy powinien najlepiej oceniać
True
. Jeśli więcej niż jeden klucz zostanie ocenionyTrue
, wyniki mogą wydawać się nieprzewidywalne.źródło
Istnieje alternatywa, która moim zdaniem jest dość nieczytelna, ale i tak podzielę się tak jako ciekawostka:
Więcej informacji tutaj: https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
źródło
Jeśli chcesz użyć powyższego kodu w jednej linii, możesz użyć:
W ten sposób x zostanie przypisane 2, jeśli i> 100, 1, jeśli i <100, a 0, jeśli i = 100
źródło
Zależy to również od charakteru twoich wypowiedzi. Ogólna rada dotycząca innych odpowiedzi „nie robić tego” jest całkiem ważna w przypadku stwierdzeń ogólnych i wyrażeń rodzajowych.
Ale jeśli wszystko, czego potrzebujesz, to tabela "wysyłkowa", na przykład wywołanie innej funkcji w zależności od wartości danej opcji, możesz umieścić funkcje do wywołania wewnątrz słownika.
Coś jak:
Zamiast if-else:
źródło
Ludzie już wspominali o wyrażeniach trójskładnikowych. Czasami w przypadku prostego przypisania warunkowego jako przykładu można użyć wyrażenia matematycznego do wykonania przypisania warunkowego. Może to nie uczynić twojego kodu bardzo czytelnym, ale umieszcza go w jednej dość krótkiej linii. Twój przykład mógłby wyglądać następująco:
Porównania byłyby prawdziwe lub fałszywe, a podczas mnożenia przez liczby wyniósłby 1 lub 0. Można by użyć + zamiast | pośrodku.
źródło
Operator trójargumentowy jest najlepszym sposobem wyrażenia zwięzły. Składnia to
variable = value_1 if condition else value_2
. Na przykład musisz dwukrotnie zastosować operator trójskładnikowy:źródło
Możesz użyć zagnieżdżonych potrójnych instrukcji if.
źródło