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())
isTrue
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
,则获得第一次猜测的结果。