Pythonの三項演算子とlambda式での不具合

以下の投稿の時もだったけれど、何かあぶねえ。。。

Python の 三項演算子 は 複数の値(tuple)を返せる

Python では、p if True else q で、三項演算子できるけれど、
それで lambda を返そうとすると、なんか上手く行かない時が。
しかも例外出ないから怖い。

fn(0) でラムダ実行しているのに、値じゃなくって関数が返ってくる。

この式、条件が True の場合は、正常に値を返します。

False の場合は、値ではなく関数?を返している模様(冒頭参照)。

解決策は、先の lambda を括弧で囲むこと。

あぶねえから、三項演算子の二つの項は、括弧で囲むべきかも。

fn = lambda a: a + 1 if False else lambda a: a + 2
print(fn(0))                            # 関数を返す

fn = lambda a: a + 1 if True else lambda a: a + 2
print(fn(0))                        # Trueは問題無い

fn = (lambda a: a + 1) if False else (lambda a: a + 2)
print(fn(0))                       # 両方括弧で囲もう