2016/06/20

Python の三項演算子

Python の三項演算子についてご説明します。

Python では次の形で三項演算を利用することができます。

result = a if cond else b

この場合、条件 cond が True の場合は a 、そうでない場合は b が返されます。

例を挙げてみます。たとえば、次の関数は引数が True と評価される場合だけその値を int() 関数に渡す関数です。

def to_int(num_raw):
    """引数を整数型に変換する
    """
    return int(num_raw) if num_raw else 0

次のように使います。

to_int('5')   # => 5
to_int('12')  # => 12
to_int('')    # => 0  else の値が返される
to_int(None)  # => 0  else の値が返される

int() に空文字列や None を渡すと例外があがるので、この例では引数が空文字列や None の場合の戻り値は 0 にフォールバックするようにしています。

もうひとつ例をあげてみます。次の例では debug フラグが True の場合は p は pprint となり、 False の場合は通常の print となります。

from pprint import pprint

debug = True

# debug フラグが True の場合は pprint を使う、そうでない場合は print を使う
p = pprint if debug else print

p({'first name': 'Taro', 'last name': 'Suzuki',
'country': 'Japan', 'age': 20, 'hobby': 'Tennis'})
# => {'age': 20,
# 'country': 'Japan',
# 'first name': 'Taro',
# 'hobby': 'Tennis',
# 'last name': 'Suzuki'}

以上です。

ちなみに三項演算の if else を重ねて入れ子にすることもできますが、見た目が複雑になり一見でぱっと処理が理解できない式になるので、原則三項演算は入れ子にはせず別の式に分けた方がよいかと思います。

以上です。

ちなみに、三項演算子は英語では「 ternary operator 」や「 ternary conditional operator 」というそうです。


- Does Python have a ternary conditional operator? - Stack Overflow

0 件のコメント: