Shkrimi i deklaratave if në një rresht me operatorin tresh të Python (operatori i kushtëzuar)

biznes

Python ka një stil shkrimi të quajtur operatorë tresh (operatorë të kushtëzuar) që mund të përshkruajë një proces si një deklaratë if në një rresht të vetëm.

Më poshtë shpjegohet këtu, së bashku me kodin e mostrës.

  • Shkrimi bazë i operatorëve tresh
  • if ... elif ... else ...Përshkruani këtë në një rresht
  • Kombinimi i listës së shënimeve gjithëpërfshirëse dhe operatorëve tresh
  • Kombinim i funksioneve anonime (shprehje lambda) dhe operatorëve tresh

Shihni artikullin vijues për më shumë informacion mbi deklaratën normale if.

Shkrimi bazë i operatorëve tresh

Në Python, operatori tresh mund të shkruhet si më poshtë

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

Nëse dëshironi të ndërroni vlerat sipas kushteve, thjesht shkruani çdo vlerë ashtu siç është.

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

Nëse dëshironi të ndërroni përpunimin sipas kushteve, përshkruani secilën shprehje.

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

Shprehjet që nuk kthejnë një vlerë (shprehjet që kthejnë Asnjë) janë gjithashtu të pranueshme. Në varësi të kushtit, njëra nga shprehjet vlerësohet dhe procesi ekzekutohet.

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

Ekuivalente me kodin e mëposhtëm të shkruar me një deklaratë normale if.

a = 1

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

Shprehjet e shumëfishta të kushtëzuara gjithashtu mund të bashkohen duke përdorur operatorë logjikë (dhe, ose, etj.).

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 ...Përshkrimi me një rresht

if ... elif ... else ...Nuk ka asnjë mënyrë të veçantë për ta shkruar këtë në një rresht të vetëm. Megjithatë, mund të realizohet duke përdorur një operator tjetër tresh në shprehjen që vlerësohet kur shprehja e kushtëzuar e operatorit tresh është false. Imazhi i operatorëve tresh të foleve.

Megjithatë, mund të jetë më mirë të mos përdoret gjerësisht, sepse zvogëlon lexueshmërinë.

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

Shprehja e mëposhtme e kushtëzuar mund të interpretohet në dy mënyrat e mëposhtme, por trajtohet si e para (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 

Një shembull konkret është si më poshtë. Shprehja e parë konsiderohet sikur të ishte e dyta.

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

Kombinimi i listës së shënimeve gjithëpërfshirëse dhe operatorëve tresh

Një përdorim i dobishëm i operatorit tresh është kur përpunohen listat në shënimin e kuptimit të listës.

Duke kombinuar operatorin tresh dhe shënimin e kuptimit të listës, është e mundur të zëvendësohen elementët e një liste ose të kryhen disa përpunime të tjera në varësi të kushteve.

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]

Për më shumë informacion mbi shënimin e kuptimit të listës, shihni artikullin vijues.

Kombinim i funksioneve anonime (shprehje lambda) dhe operatorëve tresh

Operatori tresh, i cili mund të përshkruhet në mënyrë koncize edhe në një funksion anonim (shprehja lambda), është i dobishëm.

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

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

Vini re se, megjithëse nuk ka lidhje me operatorin tresh, shembulli i mësipërm i cakton një emër shprehjes lambda. Prandaj, mjetet e kontrollit automatik, si p.sh. konventa koduese e Python PEP8, mund të gjenerojnë një Paralajmërim.

Kjo është për shkak se PEP8 rekomandon përdorimin e def-it kur caktoni emra funksioneve.

Koncepti i PEP8 është si më poshtë

  • Shprehjet Lambda përdoren për të kaluar objekte të thirrshme si argumente, për shembull, pa i emërtuar ato
  • Në shprehjet lambda, përdorni def për të përcaktuar me emër
Copied title and URL