0

为什么在这个例子中我必须在 f 的末尾添加 () ?

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

def print_spam():
    print 'spam'

do_twice(print_spam)
spam
spam

是因为函数对象需要函数的指定参数吗?

4

2 回答 2

4

为什么在这个例子中我必须在 f 的末尾添加 () ?

因为f是函数,并且f()实际调用了函数。在您的示例do_twice(print_spam)中,向do_twice函数发送实际print_spam函数,而不是其结果。如果您使用do_twice(print_spam()),该do_twice函数将收到print_spam的返回值,即None

于 2012-03-18T08:14:50.350 回答
0

这是一个语言决定,python 确实要求所有函数调用都()必须使事情明确。举这几个例子,

 a = b

如果 b 是一个函数,那么会得到什么将是模棱两可a的(b 函数对象或调用 b 的结果?)。

 a( b )

a收到什么?(b 函数或调用 b 的结果?)。通过要求(),这些问题就不会出现

于 2012-03-18T08:19:10.977 回答