关于函数:Python if():vs if:

Python if( ): vs if:

在代码学院有一个课程,在这个例子中他们展示了

1
2
3
4
5
6
7
8
9
def speak(message):
    return message

if happy():
    speak("I'm happy!")
elif sad():
    speak("I'm sad.")
else:
    speak("I don't know what I'm feeling.")

上面的示例与我显示的其他代码无关。这只是if声明的一个例子。现在我的印象是,当我写一个if语句时,它必须以():结尾,就像上面的例子一样。

但是,在执行任务时,这不起作用:

1
2
3
4
5
6
7
def shut_down(s):
    if s =="yes"():
        return"Shutting down"
    elif s =="no"():
        return"Shutdown aborted"
    else:
        return"Sorry"

然而,这是可行的:

1
2
3
4
5
6
7
def shut_down(s):
    if s =="yes":
        return"Shutting down"
    elif s =="no":
        return"Shutdown aborted"
    else:
        return"Sorry"

我的问题是,为什么()不需要紧挨着"yes""no,但:仍然需要。我想,无论何时写一个if声明,它都会自动以():结尾。在第一个例子中,就是这样显示的。你明白我的困惑吗?


在给出的示例中,happy()sad()是函数,因此需要括号。if本身不需要在末尾加括号(不应该加括号)


不,if()无关。

happy是一个函数。happy()是对该函数的调用。因此,如果调用happy函数时返回true,if happy():将进行测试。

换句话说,if happy(): speak("I'm happy!")相当于

1
2
3
result_of_happy = happy()
if result_of_happy:
    speak("I'm happy!")


如前所述,happy() / sad()是功能,因此它们需要()。在示例2中,您将值与字符串"yes"进行比较,因为它是一个字符串,不需要()

if语句中,可以使用括号使代码更易读,并确保在其他操作之前对某些操作进行评估。

1
2
3
4
if (1+1)*2 == 4:
    print 'here'
else:
    print 'there'

不同于:

1
2
3
4
if 1+1*2 == 4:
    print 'here'
else:
    print 'there'

因为字符串对象不可调用,所以您期望的是:

然后使用lambda不是那么有效的tho:

1
2
3
4
5
6
7
def shut_down(s):
    if (lambda: s =="yes")():
        return"Shutting down"
    elif (lambda: s =="no")():
        return"Shutdown aborted"
    else:
        return"Sorry"