宿題をやっていたらternary operator
という概念にぶつかる。pythonらしいユニークな考え方だなと思ったので備忘録として書いておきます。どうせこういうの複雑にしてテストに出してくると思うので。
ternary operatorとは
一言でいうと「if else
を使って一行でexpressionを書くことが出来る」テクニック的なもの(一応operator)。statementの中では使えずexpressionの中でしか使えないという規制がある上にpython上の全てのoperatorの中で一番低い優先順位を持っているという特徴があるがそれを除けば中々ハンディーなテクニックだと思う。
The expression x if C else y first evaluates the condition, C rather than x. If C is true, x is evaluated and its value is returned; otherwise, y is evaluated and its value is returned.
もっと砕いた言い方をすると:
if test(some value):
return a
else:
return b
をternary operator
を使って書き直すと
a if test else b
a
がwhen test == True
でb
がelse
になる感じ。
ちょっとした応用(w/ elif)
そこで「elif
は使えないの?」と思う方もいるだろう。答えはイエスだ。ただコードが複雑になってくると読みにくくなることからあまり好まれてなさそうだ。
>>> i=100
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
0
>>> i=101
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
2
>>> i=99
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
1
elif
を使わずに最初の一文のelse
から更にもう一つif/else
をくっつけて枝を増やしていくイメージだ。そのため一般化するとx if test(some_value) else y if test2(some_value) else z
となる。無理矢理if statementの形に戻すとこんな感じだろうか。正直あたっている自信はないのであまり参考にし過ぎないように。。:
if test(some_value):
return x
else:
if test2(some_value):
return y
else:
return z
要は必要な数に応じてelse
を足していけばいいのだ。