Ali ima Python ternarni pogojni operator?
Če Python nima ternarnega pogojnega operatorja, ali ga je mogoče simulirati z drugimi jezikovnimi konstrukcijami?
5549
3
Če Python nima ternarnega pogojnega operatorja, ali ga je mogoče simulirati z drugimi jezikovnimi konstrukcijami?
Da, v različici 2.5 je bila dodana. Sintaksa izraza je:
Najprej se ovrednoti
pogoj
, nato se ovrednoti in vrne natanko ena od vrednostia
alib
na podlagi logične vrednostipogoja
. Če jepogoj
ovrednoten kotTrue
, se ovrednoti in vrnea
,b
pa se ne upošteva, ali pa se ovrednoti in vrneb
,a
pa se ne upošteva.To omogoča kratek stik, saj se, kadar je
pogoj
resničen, ovrednoti lea
,b
pa se sploh ne ovrednoti, kadar pa jepogoj
neresničen, se ovrednoti leb
,a
pa se sploh ne ovrednoti.Na primer:
Upoštevajte, da so pogojniki izraz in ne izjava. To pomeni, da znotraj pogojnega izraza ne morete uporabljati stavkov za pripisovanje ali
pass
ali drugih izjav:Lahko pa uporabite pogojne izraze za dodelitev spremenljivke na naslednji način:
Pogojni izraz si predstavljajte kot preklapljanje med dvema vrednostma. Zelo uporaben je, kadar ste v situaciji 'ena vrednost ali druga', vendar ne naredi veliko drugega.
Če morate uporabiti izjave, morate namesto pogojnega izraza uporabiti običajno
if
izjavo.Upoštevajte, da ga nekateri pythonovci iz več razlogov ne odobravajo:
condition ? a : b
iz številnih drugih jezikov (kot so C, C++, Go, Perl, Ruby, Java, Javascript itd.), kar lahko povzroči napake, če ga uporabljajo ljudje, ki ne poznajo Pythonovega "presenetljivega" vedenja (lahko obrnejo vrstni red argumentov).if
' lahko resno uporaben in naredi vašo skripto bolj jedrnato, resnično zaplete vašo kodo).Če si težko zapomnite vrstni red, potem se spomnite, da pri glasnem branju (skoraj) poveste, kar ste mislili. Na primer,
x = 4 if b > 8 else 9
se glasno prebere kotx bo 4, če je b večji od 8, sicer 9
.Uradna dokumentacija:
Za različice pred 2.5 je tu trik:
Lahko da napačne rezultate, če
on_true
ima logično vrednost false.1 Čeprav ima to prednost, da se izrazi vrednotijo od leve proti desni, kar je po mojem mnenju bolj jasno.Iz [dokumentacije]:
(včasih imenovan "ternarni operator") ima med vsemi operacijami v Pythonu najnižjo prioriteto.
Novost od različice 2.5.