5
1行のif文を使用して変数を無名関数に代入すると、 'else'ケースが期待どおりに動作しません。 「else」の後ろにリストされている無名関数を代入する代わりに、異なるの無名関数が割り当てられます。この関数は、の予期しないの匿名関数を返します。1行のif文を使用した匿名関数の割り当て
>> fn = lambda x: x if True else lambda x: x*x
>> fn(2)
2
>> fn = lambda x: x if False else lambda x: x*x
>> fn(2)
<function <lambda> at 0x10086dc08>
>> fn('foo')(2)
4
何が起こっているように見えることは、全体としてlambda x: x if False else lambda x: x*x
が「他」の場合では無名関数として返されるということです。次のようにして目的の動作を達成することができました:
>> fn = (lambda x: x*x, lambda x: x)[True]
>> fn(2)
2
>> fn = (lambda x: x*x, lambda x: x)[False]
>> fn(2)
4
しかし、私はまだこの異常な動作の底を知りたいです。何かご意見は?