При назначении переменной анонимной функции с использованием оператора одной строки if случай «else» не ведет себя так, как ожидалось. Вместо назначения анонимной функции, указанной после «else», назначается анонимная функция. Эта функция возвращает ожидаемую анонимную функцию.назначение анонимной функции с использованием одной строки, если оператор
>> 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
Однако, я все же хотел бы получить в нижней части этого необычного поведения. Есть предположения?