Tři pokud ano

16. 10. 2012 18:45 Petr Blahoš

Python má poměrně zajímavou learning curve. Vzpomínám si, že když jsem poprvé viděl jejich návrh ternárního operátoru, tak jsem se zděsil. Teď po pár letech jsem to konečně poprvé použil, a zjistil, jsem, že to vlastně funguje perfektně, a přesně tak, jak to popisovali:

result = numerator/denominator if denominator else 0

Nelíbí se vám to co? Ale ono to funguje, a funguje to překvapivě dobře. Odpovídá to takové té sémantice, že si řekneme: asi to vyjde. Takže

result = numerator/denominator

Ale co když to nevyjde? Tak ještě přidáme podmínku.

result = numerator/denominator if denominator # syntax error

Jenže tohle nestačí, protože podle Pythonu, Explicit is better than implicit. Takže dostaneme:

result = numerator/denominator if denominator else 0

V této souvislosti bývá zmiňováno, že nějak taky funguje

result = denominator and numerator/denominator or 0

ale má to jeden háček.

n = 10
d = 5
print d and n/d or None # ==> 2
n = 0
d = 5
print d and n/d or None # ==> None ale chceme 0

Zkuste si ještě:

print 0 and []
print [] and 0
print 0 and [] or None
print [] and 0 or None
print None or [] and 0
print None or 0 and None

Sdílet