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