- pythonであれ?とおもったことをメモしときます。
三項演算子ってないの?
- 三項演算子(条件演算子)って好きなんですよね〜(新入社員にわからないと言われて衝撃を受けましたが...)
>>> a = True
>>> b = a ? "OK" : "NG"
File "<stdin>", line 1
b = a ? "OK" : "NG"
^
SyntaxError: invalid syntax
- エラーになりました...
>>> b = "OK" if a else "NG"
>>> print(b)
OK
- こっちのほうが英語的にも自然なんでしょうね。(まだちょっと慣れない)
- perlにも後置ifで
$b = "OK" if (a);
って書き方はありますが。
複合的な三項演算子
- (こういう書き方するからわからないとか言われるんですが...)
- 条件をつなげることも可能です。
sh-3.2$ perl -le '$a=0;$b=($a==0)?"ZERO":($a==1)?"ONE":($a==2)?"TWO":"TAKUSAN!";print $b'
ZERO
sh-3.2$ perl -le '$a=1;$b=($a==0)?"ZERO":($a==1)?"ONE":($a==2)?"TWO":"TAKUSAN!";print $b'
ONE
sh-3.2$ perl -le '$a=2;$b=($a==0)?"ZERO":($a==1)?"ONE":($a==2)?"TWO":"TAKUSAN!";print $b'
TWO
sh-3.2$ perl -le '$a=3;$b=($a==0)?"ZERO":($a==1)?"ONE":($a==2)?"TWO":"TAKUSAN!";print $b'
TAKUSAN!
- これはpython風に書くとどうなるんでしょ?
>>> a=0
>>> b = "ZERO" if a == 0 else "ONE" if a == 1 else "TWO" if a == 2 else "TAKUSAN!"
>>> b
'ZERO'
>>> a=1
>>> b = "ZERO" if a == 0 else "ONE" if a == 1 else "TWO" if a == 2 else "TAKUSAN!"
>>> b
'ONE'
>>> a=2
>>> b = "ZERO" if a == 0 else "ONE" if a == 1 else "TWO" if a == 2 else "TAKUSAN!"
>>> b
'TWO'
>>> a=3
>>> b = "ZERO" if a == 0 else "ONE" if a == 1 else "TWO" if a == 2 else "TAKUSAN!"
>>> b
'TAKUSAN!'
- 連続するとむしろわかりづらいかも...
やっぱり欲しいな〜
- わかりにくい言われることがありますが、使えたほうがいいな〜
- pythonの設計思想に反するんですかね?