Har Python en ternær betinget operatør?
Hvis Python ikke har en ternær betingelsesoperator, er det så muligt at simulere en sådan ved hjælp af andre sprogkonstruktioner?
5549
3
Hvis Python ikke har en ternær betingelsesoperator, er det så muligt at simulere en sådan ved hjælp af andre sprogkonstruktioner?
Ja, det blev tilføjet i version 2.5. Syntaksen for udtrykket er:
Først evalueres
condition
, derefter evalueres præcis en af entena
ellerb
og returneres baseret på Boolean værdien afcondition
. Hviscondition
evalueres tilTrue
, så evalueres og returneresa
, menb
ignoreres, ellers nårb
evalueres og returneres, mena
ignoreres.Dette giver mulighed for kortslutning, fordi når
condition
er sand, evalueres kuna
ogb
slet ikke, men nårcondition
er falsk, evalueres kunb
oga
slet ikke.For eksempel:
Bemærk, at conditionals er et udtryk, ikke en statement. Det betyder, at du ikke kan bruge assignment statements eller
pass
eller andre statements inden for et betinget udtryk:Du kan dog bruge betingede udtryk til at tildele en variabel på følgende måde:
Tænk på det betingede udtryk som et skift mellem to værdier. Det er meget nyttigt, når du er i en "den ene eller den anden værdi"-situation, det men gør ikke meget andet.
Hvis du skal bruge udsagn, skal du bruge et normalt
if
udsagn i stedet for et betinget udtryk.Husk på at det er misbilliget af nogle Pythonistaer af flere grunde:
condition ? a : b
fra mange andre sprog (såsom C, C++, Go, Perl, Ruby, Java, Javascript osv.), hvilket kan føre til fejl, når folk, der ikke er bekendt med Pythons "overraskende" opførsel, bruger den (de kan vende argumenternes rækkefølge om).if
" kan være rigtig nyttig og gøre dit script mere kortfattet, komplicerer det virkelig din kode)Hvis du har problemer med at huske rækkefølgen, så husk at når du læser højt, så siger du (næsten) det du mener. F.eks.
x = 4 if b > 8 else 9
læses højt somx vil være 4 hvis b er større end 8 ellers 9
.Officiel dokumentation:
For versioner før 2.5 er der et trick:
Det kan give forkerte resultater, når
on_true
har en falsk boolsk værdi.1 Selv om det har den fordel, at udtrykkene evalueres fra venstre mod højre, hvilket efter min mening er mere klart.Fra dokumentationen:
Nyt siden version 2.5.