LoginSignup
10
9

More than 5 years have passed since last update.

python3x: ternary operators、if-elif-elseを一文で

Last updated at Posted at 2016-02-16

宿題をやっていたら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

awhen test == Truebelseになる感じ。

ちょっとした応用(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を足していけばいいのだ。

参考にしたリンク

10
9
0

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
10
9