Python 使用单行if语句的匿名函数赋值
当使用单行if语句将变量分配给匿名函数时,“else”案例的行为与预期不符。不分配“else”后面列出的匿名函数,而是分配一个不同的匿名函数。此函数返回预期的匿名函数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>
>> 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)