为何Python中Lambda表达式即使条件为假,仍使if判断结果为真?
为什么Lambda作为if条件时总是执行?
这个问题其实很容易踩坑——你根本没调用这个lambda函数!
在Python里,if语句判断的是条件表达式的“真值”:几乎所有对象默认都是True,只有少数特殊情况(比如None、0、空列表/字典、False本身)才会被判定为False。而你写的lambda x: True == True本质上是创建了一个函数对象,这个对象本身在布尔判断里永远是True,不管它内部的表达式是什么。
看你的代码:
>>> if lambda x: True == True: ... print('yes') ... yes >>> if lambda x: False == True: ... print('yes') ... yes
这里的lambda x: ...只是定义了一个函数,但你没有执行它。if检查的是“这个函数对象是否为真”,而不是“这个函数执行后的返回值是否为真”。函数对象永远是真值,所以两个if都会执行print('yes')。
正确的做法是调用lambda函数
如果你想判断lambda内部表达式的结果,必须调用它:
- 如果lambda需要参数,就传一个参数进去(哪怕参数没被用到):
>>> if (lambda x: True == True)(1): ... print('yes') ... yes >>> if (lambda x: False == True)(2): ... print('yes') ... # 这里不会输出yes,因为lambda返回False - 如果你的lambda不需要参数,干脆去掉参数定义,再调用:
>>> if (lambda: False == True)(): ... print('yes') ... # 同样不会输出yes
简单来说,你把“函数定义”当成了“函数执行结果”来用,这才导致了不管内部表达式是什么,if都为True的情况~
内容的提问来源于stack exchange,提问作者Apoorv Mishra




