Heeft Python een ternaire voorwaardelijke operator?
Als Python geen ternaire voorwaardelijke operator heeft, is het dan mogelijk om er een te simuleren met behulp van andere taalconstructies?
5549
3
Als Python geen ternaire voorwaardelijke operator heeft, is het dan mogelijk om er een te simuleren met behulp van andere taalconstructies?
Ja, het werd toegevoegd in versie 2.5. De expressie syntaxis is:
Eerst wordt
voorwaarde
geëvalueerd, dan wordt precies één vana
ofb
geëvalueerd en geretourneerd op basis van de Booleaanse waarde vanvoorwaarde
. Alscondition
evalueert naarTrue
, dan wordta
geëvalueerd en teruggegeven maarb
wordt genegeerd, of anders alsb
wordt geëvalueerd en teruggegeven maara
wordt genegeerd.Dit maakt kortsluiting mogelijk, want als
voorwaarde
waar is, wordt alleena
geëvalueerd enb
helemaal niet, maar alsvoorwaarde
onwaar is, wordt alleenb
geëvalueerd ena
helemaal niet.Bijvoorbeeld:
Merk op dat conditionals een expressie zijn, geen statement. Dit betekent dat je geen toewijzingsstatements of
pass
of andere statements kunt gebruiken binnen een conditionele expressie:Je kunt echter wel voorwaardelijke expressies gebruiken om een variabele toe te wijzen, zoals dit:
Denk aan de voorwaardelijke uitdrukking als het schakelen tussen twee waarden. Het is erg handig wanneer je'in een 'de ene waarde of de andere' situatie zit, het maar'doet verder niet veel.
Als je verklaringen moet gebruiken, moet je een normaal
if
statement gebruiken in plaats van een voorwaardelijke expressie.Houd in gedachten dat het door sommige Pythonistas wordt afgekeurd om verschillende redenen:
voorwaarde ? a : b
ternaire operator uit vele andere talen (zoals C, C++, Go, Perl, Ruby, Java, Javascript, enz.), wat tot bugs kan leiden wanneer mensen die niet bekend zijn met Python's "verrassend" gedrag het gebruiken (ze kunnen de argumentvolgorde omkeren).if
' echt nuttig kan zijn, en je script beknopter kan maken, maakt het je code wel ingewikkelder)Als je'moeite hebt met het onthouden van de volgorde, bedenk dan dat als je hardop leest, je (bijna) zegt wat je bedoelt. Bijvoorbeeld,
x = 4 als b > 8 anders 9
wordt hardop gelezen alsx zal 4 zijn als b groter is dan 8 anders 9
.Officiële documentatie:
Voor versies voor 2.5, daar's de truc:
Het kan verkeerde resultaten geven wanneer
on_true
een valse boolean waarde heeft.1 Hoewel het wel het voordeel heeft dat expressies van links naar rechts worden geëvalueerd, wat naar mijn mening duidelijker is.Uit de documentatie:
Nieuw sinds versie 2.5.