Scrierea instrucțiunilor if într-o singură linie cu ajutorul operatorului ternar din Python (operator condițional)

Afaceri

Python are un stil de scriere numit operatori ternari (operatori condiționali) care poate descrie un proces precum o instrucțiune if într-o singură linie.

Următoarele aspecte sunt explicate aici, împreună cu un exemplu de cod.

  • Scrierea de bază a operatorilor ternari
  • if ... elif ... else ...Descrieți acest lucru într-o singură linie
  • Notarea cuprinzătoare a listei de combinații și operatorii ternari
  • Combinație de funcții anonime (expresii lambda) și operatori ternari

Consultați următorul articol pentru mai multe informații despre instrucțiunea normală if.

Scrierea de bază a operatorilor ternari

În Python, operatorul ternar poate fi scris după cum urmează

Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false

Dacă doriți să schimbați valorile în funcție de condiții, scrieți pur și simplu fiecare valoare ca atare.

Value to return if conditional expression is true if conditional expression else Value to return if conditional expression is false
a = 1
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# odd

a = 2
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# even

Dacă doriți să comutați procesarea în funcție de condiții, descrieți fiecare expresie.

a = 1
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 3

a = 2
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 4

Sunt acceptate și expresiile care nu returnează o valoare (expresii care returnează None). În funcție de condiție, se evaluează una dintre expresii și se execută procesul.

a = 1
print('even') if a % 2 == 0 else print('odd')
# odd

Echivalent cu următorul cod scris cu o instrucțiune if normală.

a = 1

if a % 2 == 0:
    print('even')
else:
    print('odd')
# odd

Mai multe expresii condiționale pot fi, de asemenea, concatenate cu ajutorul operatorilor logici (and, or, etc.).

a = -2
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# negative and even

a = -1
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# positive or odd

if ... elif ... else ...Descriere pe o linie

if ... elif ... else ...Nu există o modalitate specială de a scrie acest lucru pe un singur rând. Cu toate acestea, se poate realiza prin utilizarea unui alt operator ternar în expresia care este evaluată atunci când expresia condițională a operatorului ternar este falsă. Imagine de anvelopare a operatorilor ternari.

Cu toate acestea, ar fi mai bine să nu o folosiți pe scară largă, deoarece reduce lizibilitatea.

a = 2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# positive

a = 0
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# zero

a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative

Următoarea expresie condițională poate fi interpretată în următoarele două moduri, dar este tratată ca prima (1).

A if condition 1 else B if condition 2 else C
1. A if condition 1 else ( B if condition 2 else C )
2. ( A if condition 1 else B ) if condition 2 else C 

Un exemplu concret este următorul. Prima expresie este privită ca și cum ar fi a doua.

a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative

result = 'negative' if a < 0 else ('positive' if a > 0 else 'zero')
print(result)
# negative

result = ('negative' if a < 0 else 'positive') if a > 0 else 'zero'
print(result)
# zero

Notarea cuprinzătoare a listei de combinații și operatorii ternari

O utilizare utilă a operatorului ternar este atunci când se procesează liste în notația de înțelegere a listelor.

Prin combinarea operatorului ternar și a notației de înțelegere a listelor, este posibil să se înlocuiască elementele unei liste sau să se efectueze alte prelucrări în funcție de condiții.

l = ['even' if i % 2 == 0 else i for i in range(10)]
print(l)
# ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9]
l = [i * 10 if i % 2 == 0 else i for i in range(10)]
print(l)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]

Pentru mai multe informații despre notația de înțelegere a listelor, consultați următorul articol.

Combinație de funcții anonime (expresii lambda) și operatori ternari

Operatorul ternar, care poate fi descris în mod concis chiar și într-o funcție anonimă (expresie lambda), este util.

get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

Rețineți că, deși nu are legătură cu operatorul ternar, exemplul de mai sus atribuie un nume expresiei lambda. Prin urmare, instrumentele de verificare automată, cum ar fi convenția de codare PEP8 din Python, pot genera un avertisment.

Acest lucru se datorează faptului că PEP8 recomandă utilizarea def atunci când se atribuie nume funcțiilor.

Conceptul PEP8 este următorul

  • Expresiile lambda sunt utilizate pentru a trece obiecte apelabile ca argumente, de exemplu, fără a le numi
  • În expresiile lambda, utilizați def pentru a defini prin nume
Copied title and URL