为什么“如果foo:”跟随分支,即使函数foo返回False?

时间:2015-07-08 12:11:13

标签: python

def foo(a):
    print("I'm foo")
    return False


if foo:
    print("OK")
else:
    print("KO")

我运行它并返回OK。我知道,我应该写if foo():

在调用没有参数的函数时经常会忘记括号,我需要对结果进行解释。

提前感谢您的回答!

3 个答案:

答案 0 :(得分:2)

写作时

 if foo:
    print("OK")
else:
    print("KO")

您实际上正在测试函数指针foo。它被定义,因此它打印" OK"并且它不会调用该函数。使用括号,您可以调用foo函数并运行其代码。

答案 1 :(得分:1)

如果值不等于这些

中的任何值,则

python if条件

0, None, "", [], {}, False, ()

下面

def foo(a):
    print("I'm foo")
    return False

>>>foo
<function __main__.foo>

这意味着变量foo指向该函数。如果您调用函数foo(arg),它将按预期返回False。所以

>>>foo("arg")
False

答案 2 :(得分:0)

在这种情况下,您的代码与

相同
if foo != None:
    print("OK")
else:
    print("KO")

结果是

  

&#34; OK&#34;

因为foo确实存在。