2012-03-18 103 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?的结果)。通过要求(),不会出现这些问题