Python hefur ritstíl sem kallast ternary operators (skilyrtir rekstraraðilar) sem geta lýst ferli eins og if setningu í einni línu.
Eftirfarandi er útskýrt hér ásamt sýnishornskóða.
- Grunnritun þriðjunga rekstraraðila
if ... elif ... else ...
Lýstu þessu í einni línu- Sameina lista yfir alhliða nótnaskrift og þrískipt rekstraraðila
- Samsetning nafnlausra aðgerða (lambda-tjáninga) og þrískiptra aðgerða
Sjá eftirfarandi grein fyrir frekari upplýsingar um eðlilega ef yfirlýsingu.
Grunnritun þriðjunga rekstraraðila
Í Python er hægt að skrifa þrískiptinguna sem hér segir
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Ef þú vilt skipta um gildi í samræmi við aðstæður skaltu einfaldlega skrifa hvert gildi eins og það er.
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
Ef þú vilt skipta um vinnslu í samræmi við aðstæður skaltu lýsa hverri tjáningu.
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
Tjáning sem skilar ekki gildi (tjáning sem skilar Engu) eru einnig ásættanleg. Það fer eftir ástandinu, ein af tjáningunum er metin og ferlið er keyrt.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Jafngildir eftirfarandi kóða sem er skrifaður með venjulegri if-yfirlýsingu.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Einnig er hægt að sameina margar skilyrtar tjáningar með því að nota rökræna aðgerða (og, eða, osfrv.).
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 ...Einlína lýsing
if ... elif ... else ...
Það er engin sérstök leið til að skrifa þetta á einni línu. Hins vegar er hægt að framkvæma það með því að nota annan þrískipan í tjáningu sem er metin þegar skilyrt tjáning þrískiptingsins er röng. Mynd af hreiður þriðjungi rekstraraðila.
Hins vegar getur verið best að nota það ekki mikið því það dregur úr læsileika.
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
Eftirfarandi skilyrta tjáningu má túlka á eftirfarandi tvo vegu, en er meðhöndluð sem fyrri (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
Áþreifanlegt dæmi er sem hér segir. Litið er á fyrri tjáninguna eins og hún væri sú seinni.
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
Sameina lista yfir alhliða nótnaskrift og þrískipt rekstraraðila
Gagnleg notkun á þrískiptingunni er þegar unnið er með lista í listaskilningi.
Með því að sameina þrískiptinguna og listaskilning er hægt að skipta út þáttum lista eða framkvæma aðra úrvinnslu eftir aðstæðum.
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]
Fyrir frekari upplýsingar um nótnaskilning á lista, sjá eftirfarandi grein.
Samsetning nafnlausra aðgerða (lambda-tjáninga) og þrískiptra aðgerða
Þrírvirki, sem hægt er að lýsa hnitmiðað jafnvel í nafnlausu falli (lambda tjáning), er gagnleg.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Athugaðu að þótt það tengist ekki þrískiptingunni, þá gefur dæmið hér að ofan nafn á lambda tjáninguna. Þess vegna geta sjálfvirk eftirlitstæki eins og Python erfðaskráningin PEP8 gefið viðvörun.
Þetta er vegna þess að PEP8 mælir með því að nota def þegar nöfnum er úthlutað til aðgerða.
Hugmyndin um PEP8 er sem hér segir
- Lambda tjáning eru notuð til að senda kallanlega hluti sem rök, til dæmis, án þess að nefna þá
- Í lambda tjáningum, notaðu def til að skilgreina með nafni