Python 使用单行if语句的匿名函数赋值

Python 使用单行if语句的匿名函数赋值,python,Python,当使用单行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>

当使用单行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的绑定比条件表达式弱。事实上,它在语言中具有最少的运算符优先级。从1:

因此,这一行:

fn = lambda x: x if True else lambda x: x*x
实际上被Python解释为:

fn = lambda x: (x if True else lambda x: x*x)
要执行所需操作,需要添加括号:

fn = (lambda x: x) if True else (lambda x: x*x)

1请注意,表格的顺序是从最小到最大

fn = (lambda x: x) if True else (lambda x: x*x)