You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何Python中Lambda表达式即使条件为假,仍使if判断结果为真?

为什么Lambda作为if条件时总是执行?

这个问题其实很容易踩坑——你根本没调用这个lambda函数

在Python里,if语句判断的是条件表达式的“真值”:几乎所有对象默认都是True,只有少数特殊情况(比如None0、空列表/字典、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

火山引擎 最新活动