即使有错误的条件,Python lambda也会返回true

时间:2018-05-09 13:10:09

标签: python lambda

>>> if lambda x: True == True:
... print('yes')
...
yes
>>> if lambda x: False == True:
... print('yes')
...
yes

5 个答案:

答案 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