2009-11-06 12 views

Odpowiedz

157
a = '123' if b else '456' 
+10

Ten potrójny operator został wprowadzony w Pythonie 2.5. –

+0

dzięki! dokładnie to, czego szukałem. nie można go znaleźć na stronie Pythona docs. – huy

+0

W celu późniejszego wykorzystania, oto dokumentacja Pythona dla wyrażenia warunkowego: http://docs.python.org/reference/expressions.html#boolean-operations –

9

Moje tajemnicze wersja ...

a = ['123', '456'][b == True] 
+1

To było jedno ze starych podejść, zanim wypowiedzenie jednoliniowe było możliwe, prawda? Tak jak można to zrobić logicznie: 'True i" foo "lub" bar " ' – jdi

14

Podczas a = 'foo' if True else 'bar' jest bardziej nowoczesny sposób prowadzenia trójskładnikowej if (Python 2.5+), odpowiednik 1-do-1 od wersji może być:

a = (b == True and "123" or "456") 

... co w Pythonie powinien być skrócony do:

a = b is True and "123" or "456" 

... lub jeśli po prostu wan t przetestować prawdziwość wartości B w ogóle ...

a = b and "123" or "456" 

? : można dosłownie zamieniane na and or

+2

Jakiego rodzaju jest czarna magia? Dzięki – Inversus

+1

Powinienem zauważyć, że i tutaj, czy też tutaj, podejście może na ciebie popalić, jeśli wartość "123" byłaby w rzeczywistości pustym łańcuchem lub wartością fałszywą. The if ..else jest nieco bezpieczniejszy. – jdi

+0

Schludnie! Dzięki za to. –