lambda函数的bool值是否为false?

问题描述 投票:1回答:3

当给予bool函数时,lambda函数是否可以返回False值?

这个lambda函数例如产生True:

bool(lambda x:[])
True
python python-3.x
3个回答
1
投票

只有文档中Truth Value Testing中指定的对象,以及__bool____len__方法分别返回False0的对象才是虚假对象。

其他一切(是的,这包括任何lambda)是真实的。


3
投票

不,你不能用纯lambda表达做到这一点。

lambda x:[]

属于那种类型

<class 'function'>

正如the documentation所说,没有任何类型的东西会变成虚假的 - 所以它会变得真实;即将它传递给bool将返回True

如果你想要一个评估为False的函数(一个可调用的),我会完全按照khelwood's answer中描述的那样做。


2
投票

Lambdas只是编写函数的另一种方法。像几乎所有东西一样,它们默认是真的。您可以创建一个类,其实例表现为函数并且本身就是假的。它们不是lambda函数,但没有理由应该是一个问题。

例如:

class FalseyFunction:
    def __init__(self, func):
        self.func = func
    def __call__(self, *args, **kwargs):
        return self.func(*args, **kwargs)
    def __bool__(self):
        return False

>>> f = FalseyFunction(lambda x:[])
>>> f(0)
[]
>>> bool(f)
False
© www.soinside.com 2019 - 2024. All rights reserved.