Að skrifa if staðhæfingar í einni línu með Python’s ternary operator (skilyrt rekstraraðili)

Viðskipti

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
Copied title and URL