为什么我必须在这个例子中在f的末尾添加()?
def do_twice(f):
f()
f()
def print_spam():
print 'spam'
do_twice(print_spam)
spam
spam
是因为函数对象需要函数的指定参数吗?
答案 0 :(得分:4)
为什么我必须在这个例子中在f的末尾添加()?
因为f
是函数,f()
实际调用函数。在您的示例do_twice(print_spam)
中,do_twice
函数发送实际的print_spam
函数,而不是结果。如果您使用do_twice(print_spam())
,则do_twice
函数会收到print_spam
的返回值,即None
答案 1 :(得分:0)
这是一个语言决定,python确实要求所有函数调用()
使事情明确无误。举几个例子,
a = b
如果b是一个函数,a
得到什么(b函数对象或调用b的结果?)将是不明确的。
a( b )
a
会收到什么? (b函数或调用b的结果?)。通过要求()
,不会出现这些问题