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