python 中的任何内容不打印内容

any in python doesn't print content

我正在玩 any,发现了这个:

def f():
    print(1)
    return True


def g():
    print(2)
    return False


if any(lambda x: x() for x in [g, f, f]):
    print(3)

我想我会得到

2
3

2
1
3

但只得到

3

我不知道为什么。

lambda 从未真正被调用,所以它本身被评估,函数对象显然是真实的。

>>> bool(lambda: False)
True
>>> bool(max)
True
>>> bool(f)
True

只需删除 lambda 部分:

if any(x() for x in [g, f, f]):
    print(3)

输出:

2
1
3

问题在行

if any(lambda x: x() for x in [g, f, f]):

any 函数将 return True 并且它只会打印 3 ,就像它应该的那样,因为你正在 returning 一些 lambda 对象但你没有调用它们。

所以如果你想表现得像你预期的那样,你应该试试这个:

if any(x() for x in [g, f, f]):