对象代码括号(初学者)

时间:2012-03-18 08:11:17

标签: python object-code

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

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

def print_spam():
    print 'spam'

do_twice(print_spam)
spam
spam

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

2 个答案:

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