2012-03-18 97 views
0

爲什麼在這個例子中我必須在f的末尾添加()?對象代碼圓括號(初學者)

def do_twice(f): 
    f() 
    f() 

def print_spam(): 
    print 'spam' 

do_twice(print_spam) 
spam 
spam 

是因爲函數對象需要函數的指定參數嗎?

+0

將括號添加到函數名稱的末尾意味着您正在調用它。如果你不這樣做,該函數將不會被調用。 – rubik 2012-03-18 08:14:45

+0

我想....因爲f只會引用該對象,而f()將執行該函數 – 2012-03-18 08:16:09

回答

4

爲什麼我在這個例子中添加()在f的末尾?

因爲f是功能,和f()實際上調用功能。在你的例子中do_twice(print_spam)發送do_twice函數的實際print_spam函數,而不是它的結果。如果你要使用do_twice(print_spam()),該do_twice函數將收到print_spam的返回值,這是None

0

這是一種語言的決定,蟒蛇確實需要所有的函數調用有()使事情毫不含糊的。就拿這幾個例子,

a = b 

,如果b是一個功能,那將是模棱兩可什麼a會得到(在B函數對象或調用B的結果呢?)。

a(b) 

a會得到什麼? (b函數還是調用b?的結果)。通過要求(),不會出現這些問題