当给予bool函数时,lambda函数是否可以返回False值?
这个lambda函数例如产生True:
bool(lambda x:[])
True
只有文档中Truth Value Testing中指定的对象,以及__bool__
或__len__
方法分别返回False
或0
的对象才是虚假对象。
其他一切(是的,这包括任何lambda
)是真实的。
不,你不能用纯lambda
表达做到这一点。
lambda x:[]
属于那种类型
<class 'function'>
正如the documentation所说,没有任何类型的东西会变成虚假的 - 所以它会变得真实;即将它传递给bool
将返回True
。
如果你想要一个评估为False
的函数(一个可调用的),我会完全按照khelwood's answer中描述的那样做。
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