>>> if lambda x: True == True:
... print('yes')
...
yes
>>> if lambda x: False == True:
... print('yes')
...
yes
答案 0 :(得分:2)
lambda
中的检查无关。发生了什么事:
>>bool(lambda x: <anything>) # 1
True
1。只要当然没有引发SyntaxError
。
答案 1 :(得分:1)
你没有像我在评论中解释的那样调用你的lambda,但如果你想要内联你可以测试为:
if (lambda x: True == True)(None):
print("yes") # prints
if (lambda x: False == True)(None):
print("yes") # doesn't print
或者更一般,因为你实际上并没有在lambdas中使用任何参数:
if (lambda: True == True)():
print("yes") # prints
if (lambda: False == True)():
print("yes") # doesn't print
答案 2 :(得分:1)
您的代码解析与
相同if (lambda x: (True == True)):
print('yes')
这意味着您要定义一个始终返回True
的函数,然后检查该函数是否具有真值,这是因为所有function
个对象都是真实的
你想用一些参数调用函数;对于这个例子,我刚刚创建了一个object
的任意实例,但是参数可以是任何。
if (lambda x: True)(object()) == True
print('yes')
如果将其分成多行,则更容易看到:
f = lambda x: True
some_arg = object()
if f(some_arg) == True: # or just if f(some_arg):
print('yes')
答案 3 :(得分:1)
你没有调用你的lambda。你在这里做的是测试lambda对象本身的布尔值(实际上是一个function
对象),这当然总是正确的。
如果你想测试lambda的结果,你必须调用它 - 在你的情况下,你必须传递一个参数,因为你定义它已经参数:
if (lambda x: True)(42):
print("yes")
if (lambda x: False)(42):
print("no")
现在这在你的代码段中真的没有意义,因为Python lambdas仅限于一个表达式,所以你也可以用(lambda x: whatever_expression)(whatever_value)
替换整个whatever_expression
。
正如Chepner所提到的,您的if
条件实际上被解析为:
if (lambda x: True == True):
不是:
if (lambda x: True) == True:
这并没有太大区别,因为我首先解释了这里测试的lambda function
对象本身的布尔值,但无论如何......作为一般规则,明确地对{进行测试{1}}或True
在python中没用 - 所有对象都有一个布尔值,所有表达式都会产生对象,所以这个
False
与
相同if some_expression == True:
答案 4 :(得分:0)
index v1
1 a
2 a
3 d
4 f
5 f
6 g
7 a
8 a
9 x
10 d
11 d
12 x
13 e
14 a
15 a
16 d
17 c
18 f
19 e
20 e
21 c