Cum să utilizați operatorul ternar Python
Publicat: 2023-01-04Acest ghid vă va învăța cum să utilizați operatorul ternar în Python. Veți învăța sintaxa și veți codifica mai multe exemple pentru a înțelege cum funcționează.
Vom începe prin a revizui modul în care funcționează instrucțiunea condiționată if-else și apoi vom învăța cum să scriem o expresie echivalentă folosind operatorul ternar.
În continuare, vom codifica câteva exemple și apoi vom învăța cum să emulăm comportamentul operatorului ternar al lui Python folosind un tuplu și un dicționar Python. În cele din urmă, vom analiza câteva cazuri de utilizare când ar trebui să preferați să utilizați operatorul ternar.
Sa incepem!
Declarația If-Else în Python: O revizuire
Puteți codifica prin pornirea unui REPL Python sau în editorul Python online al Geekflare.
Sintaxa generică a instrucțiunii if-else în Python este următoarea:
if condition: # do this else: # do this
În fragmentul de mai sus, condition
denotă condiția care trebuie verificată. Dacă condiția este evaluată la True
, atunci blocul if este declanșat. Dacă condiția se evaluează la False
, atunci instrucțiunile din blocul else sunt executate.
Iată un exemplu în care variabilei game_over
i se atribuie o valoare booleană în funcție de faptul dacă valoarea energy
este sau nu mai mică sau egală cu zero.
- Dacă
energy <= 0
,game_over
esteTrue
. - În caz contrar,
game_over
este False.
Următorul fragment de cod arată cum să faceți acest lucru folosind instrucțiunile condiționate if-else:
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
În acest exemplu, energy
este -1 care este mai mică de 0. Deci game_over
este adevărat.
Operator ternar Python: sintaxă și exemple

Python are un operator ternar care funcționează mult ca operatorul condițional ternar în limbaje precum C și C++. Sintaxa generală pentru utilizare este următoarea:
expression1 if condition else expression2
Să analizăm sintaxa de mai sus:
-
condition
: condiția de verificat. -
expression1
: expresia de evaluat dacă condiția este adevărată. -
expression2
: expresia de evaluat dacă condiția este falsă.
Acum, vom identifica ce expression1
, expression2
și condition
ar trebui să fie din versiunea if-else a codului.

Punând totul împreună, avem următoarele utilizând operatorul ternar al lui Python.
game_over = True if energy <= 0 else False print(game_over) # True
Să codificăm un alt exemplu. Să presupunem că conduci o librărie și le oferi cititorilor o reducere la achiziția lor, în funcție de cât de des au vizitat magazinul tău în ultimul an.
Lăsați numVisits
să desemneze numărul de vizite.
- Dacă
numVisits > 7
, procentul de reducere,discount_perc
este 20. - În caz contrar,
discount_perc
este 5.
Folosim operatorul ternar pentru a atribui valoare variabilei discount_perc
.
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)
În continuare, vom învăța cum să emulăm operatorul ternar folosind un tuplu Python și un dicționar.
Emularea operatorului ternar cu Python Tuple
La fel ca toate iterabilele din Python, tuplurile urmează indexarea zero. Deci, dacă aveți două elemente într-un tuplu, tuple_name[0]
indică primul element din tuplu și tuple_name[1]
oferă al doilea element din tuplu.
Tipurile de date de bază în Python sunt întregi, flotanți, șir și boolean. Python acceptă tipul de turnare care vă permite să reprezentați un anumit tip de date prin reprezentarea sa echivalentă într-un alt tip de date.
Porniți un Python REPL și rulați următoarele exemple. Dacă încercați să convertiți numere întregi în booleeni, veți observa următoarele:
-
bool(0)
esteFalse
. -
bool(<any non-zero integer>)
returneazăTrue
.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
În mod similar, atunci când turnăm boolean în numere întregi, avem următoarele:
>>> int(True) 1 >>> int(False) 0
Punând împreună turnarea și indexarea tipului, putem face după cum urmează:
- Element la indicele 0 în tuplu: valoarea care trebuie utilizată atunci când
condition
esteFalse
. - Element la indexul 1 din tuplu: valoarea care trebuie utilizată atunci când
condition
esteTrue
.
Folosind cele de mai sus, avem următoarele:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
Aici, condiția numVisits > 7
este True
, așa cum numVisits
este 10. Deoarece int(True)
este 1, valoarea discount_perc
este 20, elementul de la indicele 1.
Emularea operatorului ternar cu dicționarul Python
Puteți seta True
și False
ca taste ale dicționarului. Și puteți seta expression1
și expression2
ca valori corespunzătoare cheilor True
și, respectiv, False
.
some_dict = {True: expression1, False: expression2 }
Ce faci mai departe? Acum, dacă utilizați some_dict[condition]
, expression1
corespunzătoare cheii True
este evaluată dacă condition
este True
. Și expression2
este evaluată atunci când condition
este False
.
Să codificăm exemplul discount_perc
(din nou), dar de data aceasta folosind un dicționar Python.
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
Aici, numVisits = 10
care este mai mare decât 7. Prin urmare, condiția numVisits > 7
este True
. Deci discount_dict[numVisits > 7]
se evaluează la discount_dict[True]
, care este valoarea 20.

Ar trebui să utilizați întotdeauna operatorul ternar Python?

Până acum, am învățat cum să folosim operatorul ternar. Dar ar trebui să folosim întotdeauna operatorul ternar? Ei bine, operatorul ternar poate să nu fie cea mai bună alegere pentru toate cazurile de utilizare. Această secțiune descompune când ar trebui să preferați utilizarea operatorului ternar în detrimentul instrucțiunilor if-else. Vom acoperi, de asemenea, când ar trebui să luăm în considerare utilizarea instrucțiunii if-else în loc de operatorul ternar.
Mai concise decât blocurile If-Else
După cum sa menționat, în Python, expresia operatorului ternar este mai concisă decât declarația if-else. Prin urmare, îl puteți folosi pentru a verifica condițiile și pentru a evalua expresii condiționat din mers.
În exemplul următor, nums
este o listă de 100 de numere întregi generate aleatoriu. Pentru fiecare dintre cele 100 de numere, verificăm dacă este par sau impar. Și această evaluare are loc în interiorul șirului 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
Operatorul ternar necesită clauza Else
Când utilizați instrucțiunile condiționale if-else, clauza else este opțională. Să luăm un exemplu. Variabila game_over
este setată la True
dacă energy
scade la o valoare mai mică sau egală cu zero.
Totuși, dacă energy
este mai mare decât zero, variabila game_over
nu este niciodată inițializată. Deci veți întâlni erori dacă încercați să accesați variabila 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
O modalitate de a remedia acest lucru este să setați inițial game_over
la False
și să îl actualizați la True
dacă nivelul de energie este mai mic sau egal cu zero.
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")
Cu toate acestea, atunci când se utilizează operatorul ternar Python echivalent al celor de mai sus, clauza else nu este opțională. Operatorul ternar necesită ca expresia să fie evaluată atunci când condition
este False
.
game_over = True if energy <= 0 else False
Dacă schimbați cele de mai sus la game_over = True if energy <= 0
prin eliminarea părții else, veți întâlni o eroare de sintaxă, așa cum se arată:
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
Pentru a verifica mai multe condiții, utilizați instrucțiuni If-Else
Luați în considerare exemplul: Fiecare întrebare dintr-un set de întrebări de interviu de codificare are asociat un scor de dificultate. În funcție de acest scor, atribuim unei anumite întrebări unul dintre cele trei niveluri de dificultate: ușor, mediu sau greu. Să presupunem că avem următoarele:
Scor | Nivel de dificultate |
Mai putin decât 10 | uşor |
Între 10 și 20 | mediu |
Mai mare de 20 | greu |
Având în vedere scorul de dificultate, puteți obține nivelul de dificultate folosind operatorul ternar Python, așa cum se arată:
score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium
Expresia operatorului ternar din blocul de cod de mai sus are următoarea formă:
expression1 if condition1 else expression2 if condition2 else expression3
Deși concis, este puțin dificil de citit și de analizat. Următoarea imagine arată cum are loc fluxul de control în acest caz.

Următorul fragment de cod arată o implementare echivalentă folosind instrucțiuni if-else. După cum s-a văzut, fluxul de control este mult mai ușor de înțeles, iar codul este mai ușor de citit.
if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)
Prin urmare, atunci când aveți mai multe condiții, ar trebui să utilizați blocurile if-else în loc de operatorul ternar. Acest lucru asigură că codul este ușor de citit și de înțeles.
De asemenea, atunci când trebuie să executați mai multe instrucțiuni – în funcție de dacă condiția este adevărată sau falsă – ar trebui să luați în considerare utilizarea instrucțiunii if-else.
Concluzie
Iată o recapitulare a ceea ce ați învățat în acest tutorial.
- În Python, operatorul ternar poate fi folosit cu următoarea sintaxă:
expression1 if condition else expression2
. - Puteți emula comportamentul operatorului ternar folosind tupluri și dicționare Python.
- În timp ce operatorul ternar poate fi o alternativă mai concisă la blocurile if-else, ar trebui să vă asigurați că codul este lizibil. Pentru a îmbunătăți lizibilitatea codului, puteți utiliza instrucțiunile if-else în loc de operatorul ternar, mai ales când trebuie să înlănțuiți mai multe condiții.
În continuare, învață să verifici tutorialul despre operatori egali și nu egali în Python.