Jak korzystać z operatora trójskładnikowego Pythona
Opublikowany: 2023-01-04Ten przewodnik nauczy Cię, jak używać operatora trójskładnikowego w Pythonie. Poznasz składnię i kod kilku przykładów, aby zrozumieć, jak to działa.
Zaczniemy od przyjrzenia się, jak działa instrukcja warunkowa if-else, a następnie nauczymy się pisać równoważne wyrażenie za pomocą operatora trójskładnikowego.
Następnie zakodujemy kilka przykładów, a następnie nauczymy się emulować zachowanie operatora trójskładnikowego Pythona przy użyciu krotki i słownika Pythona. Na koniec przejrzymy kilka przypadków użycia, w których powinieneś preferować użycie operatora trójskładnikowego.
Zaczynajmy!
Instrukcja if-else w Pythonie: przegląd
Możesz kodować razem, uruchamiając Python REPL lub w internetowym edytorze Python Geekflare.
Ogólna składnia instrukcji if-else w Pythonie jest następująca:
if condition: # do this else: # do this
W powyższym fragmencie condition
oznacza warunek do sprawdzenia. Jeśli warunek ma wartość True
, wówczas uruchamiany jest blok if. Jeśli warunek ma wartość False
, wykonywane są instrukcje wewnątrz bloku else.
Oto przykład, w którym zmienna game_over
ma przypisaną wartość logiczną w zależności od tego, czy wartość energy
jest mniejsza lub równa zeru.
- Jeśli
energy <= 0
,game_over
ma wartośćTrue
. - W przeciwnym razie
game_over
jest fałszywe.
Poniższy fragment kodu pokazuje, jak to zrobić za pomocą instrukcji warunkowych if-else:
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
W tym przykładzie energy
wynosi -1, czyli mniej niż 0. Więc game_over
ma wartość True.
Operator trójskładnikowy w Pythonie: składnia i przykłady

Python ma potrójny operator, który działa bardzo podobnie do trójskładnikowego operatora warunkowego w językach takich jak C i C++. Ogólna składnia jej użycia jest następująca:
expression1 if condition else expression2
Przeanalizujmy powyższą składnię:
-
condition
: Warunek do sprawdzenia. -
expression1
: wyrażenie do oceny, czy warunek jest prawdziwy. -
expression2
: Wyrażenie do oceny, czy warunek ma wartość Fałsz.
Teraz ustalimy, jakie expression1
1 , expression2
2 i condition
powinny pochodzić z wersji kodu if-else.

Łącząc to wszystko razem, mamy następujące użycie operatora trójskładnikowego Pythona.
game_over = True if energy <= 0 else False print(game_over) # True
Zakodujmy inny przykład. Załóżmy, że prowadzisz księgarnię i dajesz czytelnikom rabat na zakupy w zależności od tego, jak często odwiedzali Twój sklep w ciągu ostatniego roku.
Niech numVisits
oznacza liczbę odwiedzin.
- Jeśli
numVisits > 7
, procent rabatu,discount_perc
wynosi 20. - W przeciwnym razie
discount_perc
wynosi 5.
Używamy operatora trójskładnikowego, aby przypisać wartość do zmiennej discount_perc
.
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)
Następnie nauczymy się emulować operatora trójskładnikowego przy użyciu krotki Pythona i słownika.
Emulowanie operatora trójskładnikowego za pomocą krotki Pythona
Podobnie jak wszystkie elementy iterowalne w Pythonie, krotki podążają za indeksowaniem zerowym. Więc jeśli masz dwa elementy w krotce, tuple_name[0]
oznacza pierwszy element w krotce, a tuple_name[1]
podaje drugi element w krotce.
Podstawowe typy danych w Pythonie to liczby całkowite, zmiennoprzecinkowe, łańcuchowe i logiczne. Python obsługuje rzutowanie typów, które pozwala reprezentować określony typ danych przez jego równoważną reprezentację w innym typie danych.
Uruchom REPL w języku Python i uruchom następujące przykłady. Jeśli spróbujesz przekonwertować liczby całkowite na wartości logiczne, zauważysz, co następuje:
-
bool(0)
jestFalse
. -
bool(<any non-zero integer>)
zwracaTrue
.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
Podobnie, podczas rzutowania wartości Boolean na liczby całkowite, otrzymujemy:
>>> int(True) 1 >>> int(False) 0
Łącząc rzutowanie typów i indeksowanie, możemy wykonać następujące czynności:
- Element o indeksie 0 w krotce: Wartość, która ma być używana, gdy
condition
ma wartośćFalse
. - Element o indeksie 1 w krotce: Wartość, która ma być używana, gdy
condition
ma wartośćTrue
.
Korzystając z powyższego mamy:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
Tutaj warunek numVisits > 7
jest True
, ponieważ numVisits
wynosi 10. Ponieważ int(True)
wynosi 1, wartość discount_perc
wynosi 20, element o indeksie 1.
Emulowanie operatora trójskładnikowego za pomocą słownika Pythona
Możesz ustawić True
i False
jako klucze słownika. Możesz też ustawić expression1
i expression2
jako wartości odpowiadające odpowiednio kluczom True
i False
.
some_dict = {True: expression1, False: expression2 }
Co zrobisz następnie? Teraz, jeśli użyjesz some_dict[condition]
, expression1
odpowiadające kluczowi True
jest oceniane, jeśli condition
ma wartość True
. A expression2
jest oceniane, gdy condition
ma wartość False
.
discount_perc
przykład Discount_perc (ponownie), ale tym razem używając słownika Pythona.
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
Tutaj numVisits = 10
, co jest większe niż 7. Dlatego warunek numVisits > 7
to True
. Tak więc discount_dict[numVisits > 7]
discount_dict[True]
, która jest wartością 20.

Czy zawsze powinieneś używać operatora trójskładnikowego Pythona?

Do tej pory nauczyliśmy się, jak używać operatora trójskładnikowego. Ale czy zawsze powinniśmy używać operatora trójskładnikowego? Cóż, potrójny operator może nie być najlepszym wyborem dla wszystkich przypadków użycia. Ta sekcja rozkłada się, kiedy powinieneś preferować użycie operatora trójskładnikowego zamiast instrukcji if-else. Omówimy również, kiedy powinniśmy rozważyć użycie instrukcji if-else zamiast operatora trójskładnikowego.
Bardziej zwięzłe niż bloki if-else
Jak wspomniano, w Pythonie wyrażenie operatora trójskładnikowego jest bardziej zwięzłe niż instrukcja if-else. W związku z tym można go używać do sprawdzania warunków i warunkowej oceny wyrażeń w locie.
W poniższym przykładzie nums
to lista 100 losowo wygenerowanych liczb całkowitych. Dla każdej ze 100 liczb sprawdzamy, czy jest ona parzysta czy nieparzysta. A ta ocena odbywa się w linii wewnątrz struny f.
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even
Operator trójskładnikowy wymaga klauzuli else
Gdy używasz instrukcji warunkowych if-else, klauzula else jest opcjonalna. Weźmy przykład. Zmienna game_over
jest ustawiona na True
, jeśli energy
spadnie do wartości mniejszej lub równej zeru.
Jeśli jednak energy
jest większa od zera, zmienna game_over
nigdy nie jest inicjowana. Więc napotkasz błędy, jeśli spróbujesz uzyskać dostęp do zmiennej game_over
.
energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {game_over}") NameError: name 'game_over' is not defined
Jednym ze sposobów rozwiązania tego problemu jest początkowe ustawienie game_over
na False
i zaktualizowanie go na True
, jeśli poziom energii jest mniejszy lub równy zeru.
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")
Jednakże, gdy używany jest odpowiednik powyższego operatora trójskładnikowego Pythona, klauzula else nie jest opcjonalna. Operator trójskładnikowy wymaga obliczenia wyrażenia, gdy condition
ma wartość False
.
game_over = True if energy <= 0 else False
Jeśli zmienisz powyższe na game_over = True if energy <= 0
, usuwając część else, napotkasz błąd składniowy, jak pokazano:
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
Aby sprawdzić wiele warunków, użyj instrukcji if-else
Rozważmy przykład: Każde pytanie w zestawie pytań do rozmowy kwalifikacyjnej ma powiązany wynik trudności. W zależności od tego wyniku, do danego pytania przypisujemy jeden z trzech poziomów trudności: łatwy, średni lub trudny. Załóżmy, że mamy następujące:
Wynik | Poziom trudności |
Mniej niż 10 | łatwy |
Między 10 a 20 | średni |
Większe niż 20 | ciężko |
Biorąc pod uwagę wynik trudności, możesz uzyskać jego poziom trudności za pomocą trójskładnikowego operatora Pythona, jak pokazano:
score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium
Wyrażenie operatora trójskładnikowego w powyższym bloku kodu ma następującą postać:
expression1 if condition1 else expression2 if condition2 else expression3
Choć zwięzły, jest nieco trudny do odczytania i przeanalizowania. Poniższy obraz pokazuje, jak przebiega przepływ sterowania w tym przypadku.

Poniższy fragment kodu przedstawia równoważną implementację przy użyciu instrukcji if-else. Jak widać, przepływ sterowania jest znacznie łatwiejszy do zrozumienia, a kod jest bardziej czytelny.
if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)
Dlatego, gdy masz wiele warunków, powinieneś użyć bloków if-else zamiast operatora trójskładnikowego. Dzięki temu kod jest łatwy do odczytania i zrozumienia.
Ponadto, gdy trzeba wykonać wiele instrukcji — w zależności od tego, czy warunek jest prawdziwy, czy fałszywy — należy rozważyć użycie instrukcji if-else.
Wniosek
Oto podsumowanie tego, czego nauczyłeś się w tym samouczku.
- W Pythonie operator trójskładnikowy może być używany z następującą składnią:
expression1 if condition else expression2
. - Możesz emulować zachowanie operatora trójskładnikowego za pomocą krotek i słowników Pythona.
- Chociaż operator trójskładnikowy może być bardziej zwięzłą alternatywą dla bloków if-else, należy upewnić się, że kod jest czytelny. Aby poprawić czytelność kodu, możesz użyć instrukcji if-else zamiast operatora trójskładnikowego, zwłaszcza gdy musisz połączyć wiele warunków.
Następnie zapoznaj się z samouczkiem dotyczącym równych i nierównych operatorów w Pythonie.