LoginSignup
0
0

More than 5 years have passed since last update.

perl使いのpythonメモ - 三項演算子

Posted at
  • 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の設計思想に反するんですかね?
0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0