python中的任何一个都不会';t打印内容

python中的任何一个都不会';t打印内容,python,any,Python,Any,我正在玩any,发现: def(): 印刷品(1) 返回真值 def g(): 印刷品(2) 返回错误 如果有(λx:x()表示[g,f,f]中的x): 印刷品(3) 我想我会 2 3. 或 2 1. 3. 但只得到 3 我不知道为什么。lambda从未被实际调用,因此它本身被计算,函数对象显然是真实的 >>> bool(lambda: False) True >>> bool(max) True >>> bool(f) True

我正在玩
any
,发现:

def():
印刷品(1)
返回真值
def g():
印刷品(2)
返回错误
如果有(λx:x()表示[g,f,f]中的x):
印刷品(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

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]):
任何函数都将返回True,并且它将只打印3,就像它应该打印的那样,因为您正在返回一些lambda对象,但您没有调用它们

因此,如果你想表现得像你期望的那样,你应该尝试以下方法:

if any(x() for x in [g, f, f]):
问题就在眼前

if any(lambda x: x() for x in [g, f, f]):
任何函数都将返回True,并且它将只打印3,就像它应该打印的那样,因为您正在返回一些lambda对象,但您没有调用它们

因此,如果你想表现得像你期望的那样,你应该尝试以下方法:

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

lambda x:x()
定义了一个函数,该函数在被调用时将调用
x
。它实际上并不调用
x
if Any(x()代表[g,f,f]):
if Any((lambda x:x())代表[g,f,f]):
中的任何一个都可以工作。您没有将包含执行这三个函数的结果的iteable传递给
Any
,您已经传递了一个生成三个lambda的生成器。我假设lambda在计算时是真实的(注意:不调用它,只是检查真实性),因此
any
成功。可能您想要更像
any(x()表示[g,f,f]中的x])
?@Kemp是的,lambda表达式生成
函数的一个实例,这被认为是真实的。@Kemp它实际上是一个包含三个lambdas@anishtain4这与编译无关。这些函数永远不会被调用。真值来自函数本身–
bool(lambda x:x())
is
True
lambda x:x()
定义了一个函数,该函数在调用时将调用
x
。它实际上并不调用
x
if Any(x()代表[g,f,f]):
if Any((lambda x:x())代表[g,f,f]):
中的任何一个都可以工作。您没有将包含执行这三个函数的结果的iteable传递给
Any
,您已经传递了一个生成三个lambda的生成器。我假设lambda在计算时是真实的(注意:不调用它,只是检查真实性),因此
any
成功。可能您想要更像
any(x()表示[g,f,f]中的x])
?@Kemp是的,lambda表达式生成
函数的一个实例,这被认为是真实的。@Kemp它实际上是一个包含三个lambdas@anishtain4这与编译无关。这些函数永远不会被调用。真值来自函数本身–
bool(lambda x:x())
True
。如果在
x()
之前添加
not
,则获得第一次猜测的结果。如果在
x()
之前添加
not
,则获得第一次猜测的结果。