Tato příručka vás naučí, jak používat ternární operátor v Pythonu. Naučíte se syntaxi a několik příkladů kódu, abyste pochopili, jak to funguje.
Začneme tím, že si zopakujeme, jak funguje podmíněný příkaz if-else, a pak se naučíme, jak napsat ekvivalentní výraz pomocí ternárního operátoru.
Dále si nakódujeme několik příkladů a pak se naučíme, jak emulovat chování ternárního operátoru Pythonu pomocí pythonské n-tice a slovníku. Nakonec se podíváme na několik případů použití, kdy byste měli raději používat ternární operátor.
Pojďme začít!
Table of Contents
Prohlášení If-Else v Pythonu: Recenze
Můžete spolu kódovat spuštěním Python REPL nebo v online Python editoru etechblog.cz.
Obecná syntaxe příkazu if-else v Pythonu je následující:
if condition: # do this else: # do this
Ve výše uvedeném úryvku podmínka označuje podmínku, která má být zkontrolována. Pokud se podmínka vyhodnotí jako True, spustí se blok if. Pokud se podmínka vyhodnotí jako False, provedou se příkazy uvnitř bloku else.
Zde je příklad, kdy je proměnné game_over přiřazena booleovská hodnota v závislosti na tom, zda je hodnota energie menší nebo rovna nule.
- Pokud energie <= 0, game_over je True.
- Jinak je game_over False.
Následující fragment kódu ukazuje, jak to provést pomocí podmíněných příkazů if-else:
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
V tomto příkladu je energie -1, což je méně než 0. Takže game_over je True.
Ternární operátor Pythonu: Syntaxe a příklady
Python má ternární operátor, který funguje podobně jako ternární podmíněný operátor v jazycích jako C a C++. Obecná syntaxe pro jeho použití je následující:
expression1 if condition else expression2
Pojďme analyzovat výše uvedenou syntaxi:
- stav: Stav, který se má zkontrolovat.
- výraz1: Výraz k vyhodnocení, zda je podmínka pravdivá.
- výraz2: Výraz k vyhodnocení, zda je podmínka False.
Nyní zjistíme, jaký výraz1, výraz2 a podmínka by měly být z verze kódu if-else.
Když to dáme dohromady, máme následující pomocí ternárního operátoru Pythonu.
game_over = True if energy <= 0 else False print(game_over) # True
Pojďme kódovat další příklad. Předpokládejme, že provozujete knihkupectví a dáte čtenářům slevu na nákup podle toho, jak často váš obchod za poslední rok navštívili.
Nechť numVisits označuje počet návštěv.
- Pokud numVisits > 7, procento slevy, diskontní_perc je 20.
- Jinak sleva_perc je 5.
Pomocí ternárního operátoru přiřadíme hodnotu proměnné diskontní_perc.
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)
Dále se naučíme, jak emulovat ternární operátor pomocí pythonské n-tice a slovníku.
Emulace ternárního operátora pomocí Python Tuple
Stejně jako všechny iterovatelné v Pythonu se n-tice řídí nulovým indexováním. Pokud tedy máte dva prvky v n-tice, název_n-tice[0] označuje první prvek v n-tice a název_n-tice[1] dává druhý prvek v n-tice.
Základní datové typy v Pythonu jsou integer, float, string a Boolean. Python podporuje přetypování typu, které vám umožňuje reprezentovat konkrétní datový typ jeho ekvivalentní reprezentací v jiném datovém typu.
Spusťte Python REPL a spusťte následující příklady. Pokud se pokusíte převést celá čísla na booleovské hodnoty, všimnete si následujícího:
- bool(0) je False.
- bool(
) vrátí hodnotu True.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
Podobně při přetypování Boolean na celá čísla máme následující:
>>> int(True) 1 >>> int(False) 0
Když dáme dohromady typové odlévání a indexování, můžeme provést následující:
- Prvek na indexu 0 v n-tici: Hodnota, která se má použít, když je podmínka False.
- Prvek na indexu 1 v n-tici: Hodnota, která se použije, když je podmínka True.
Pomocí výše uvedeného máme následující:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
Zde je podmínka numVisits > 7 True, protože numVisits je 10. Protože int(True) je 1, hodnota diskont_perc je 20, prvek na indexu 1.
Emulace ternárního operátoru pomocí slovníku Python
Jako klíče slovníku můžete nastavit True a False. A výraz1 a výraz2 můžete nastavit jako hodnoty odpovídající klíčům True a False.
some_dict = {True: expression1, False: expression2 }
co budeš dělat dál? Nyní, pokud použijete some_dict[condition], výraz1 odpovídající klíči True se vyhodnotí, pokud je podmínka True. A výraz2 je vyhodnocen, když je podmínka False.
Pojďme kódovat příklad diskont_perc (znovu), ale tentokrát pomocí slovníku Pythonu.
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
Zde je numVisits = 10, což je větší než 7. Proto podmínka numVisits > 7 je True. Takže sleva_dikt[numVisits > 7] vyhodnotí jako diskontní_dikt[True] což je hodnota 20.
Měli byste vždy používat ternárního operátora Pythonu?
Zatím jsme se naučili používat ternární operátor. Měli bychom ale vždy používat ternární operátor? No, ternární operátor nemusí být nejlepší volbou pro všechny případy použití. Tato část rozebírá, kdy byste měli upřednostňovat použití ternárního operátoru před příkazy if-else. Probereme také, kdy bychom měli zvážit použití příkazu if-else namísto ternárního operátoru.
Výstižnější než bloky If-Else
Jak již bylo zmíněno, v Pythonu je výraz ternárního operátoru stručnější než příkaz if-else. Proto jej můžete použít ke kontrole podmínek a podmíněnému vyhodnocování výrazů za běhu.
V následujícím příkladu je nums seznam 100 náhodně generovaných celých čísel. U každého ze 100 čísel zkontrolujeme, zda je liché nebo sudé. A toto vyhodnocení probíhá inline uvnitř f-řetězce.
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
Ternární operátor vyžaduje ustanovení Else
Když používáte podmíněné příkazy if-else, klauzule else je volitelná. Vezměme si příklad. Proměnná game_over je nastavena na True, pokud energie klesne na hodnotu menší nebo rovnou nule.
Pokud je však energie větší než nula, proměnná game_over se nikdy neinicializuje. Pokud se tedy pokusíte získat přístup k proměnné game_over, narazíte na chyby.
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
Jedním ze způsobů, jak to napravit, je zpočátku nastavit game_over na False a aktualizovat na True, pokud je úroveň energie menší nebo rovna nule.
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")
Při použití ekvivalentu ternárního operátoru Pythonu výše uvedenému však klauzule else není volitelná. Ternární operátor vyžaduje, aby byl výraz vyhodnocen, když je podmínka False.
game_over = True if energy <= 0 else False
Pokud změníte výše uvedené na game_over = True if energy <= 0 odstraněním části else, narazíte na chybu syntaxe, jak je ukázáno:
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
Chcete-li zkontrolovat více podmínek, použijte příkazy If-Else
Zvažte příklad: Každá otázka v sadě otázek kódovacího rozhovoru má přiřazené skóre obtížnosti. V závislosti na tomto skóre přiřadíme konkrétní otázce jednu ze tří úrovní obtížnosti: snadná, střední nebo těžká. Předpokládejme, že máme následující:
Skóre Úroveň Obtížnosti Méně než 10 snadnéMezi 10 a 20 středníVětší než 20 těžké
Vzhledem ke skóre obtížnosti můžete získat jeho úroveň obtížnosti pomocí ternárního operátoru Pythonu, jak je znázorněno:
score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium
Výraz ternárního operátoru ve výše uvedeném bloku kódu má následující formu:
expression1 if condition1 else expression2 if condition2 else expression3
Přestože je stručná, je trochu obtížné ji číst a analyzovat. Následující obrázek ukazuje, jak v tomto případě probíhá řídicí tok.
Následující fragment kódu ukazuje ekvivalentní implementaci pomocí příkazů if-else. Jak je vidět, řídicí tok je mnohem srozumitelnější a kód je čitelnější.
if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)
Pokud tedy máte více podmínek, měli byste místo ternárního operátoru použít bloky if-else. Tím je zajištěno, že kód je snadno čitelný a srozumitelný.
Také, když potřebujete provést více příkazů – v závislosti na tom, zda je podmínka pravdivá nebo nepravdivá – měli byste zvážit použití příkazu if-else.
Závěr
Zde je rekapitulace toho, co jste se v tomto tutoriálu naučili.
- V Pythonu lze ternární operátor použít s následující syntaxí: expression1 if podmínka else expression2.
- Chování ternárního operátoru můžete emulovat pomocí pythonských n-tic a slovníků.
- I když ternární operátor může být stručnější alternativou k blokům if-else, měli byste zajistit, aby byl kód čitelný. Chcete-li zlepšit čitelnost kódu, můžete místo ternárního operátoru použít příkazy if-else, zvláště když potřebujete řetězit více podmínek.
Dále se naučte podívat se na tutoriál o stejných a nestejných operátorech v Pythonu.