我无法理解为什么此代码会打印“垃圾邮件”。两次。
def do_twice(f):
f()
f()
def print_spam():
print('spam')
do_twice(print_spam)
答案 0 :(得分:11)
让我们分开您的代码......
第1部分:创建函数do_twice(f)
,将运行f()
两次。
def do_twice(f):
f()
f()
第2部分:创建一个名为print_spam()
的函数print()
"spam"
个字
def print_spam():
print('spam')
第3部分:在print_spam()
功能
do_twice()
do_twice(print_spam)
这样,您的代码就会“思考”。像这样的东西:
"哦,他打电话给do_twice(print_spam)
!现在我必须运行print_spam()
两次,因为print_spam()
取代了f()
角色。"
答案 1 :(得分:1)
print_spam
是在do_twice函数中传递的函数对象。您正在使用function_object()
答案 2 :(得分:1)
这与您如何更好地理解代码的顺序有关:
#Intermediate function right here
def do_twice(f):
f()
f()
#Function Definition Right here
def print_spam():
print('spam')
#calling the (actual) function which in turn calls the intermediate function
do_twice(print_spam)
因此,在您一次调用(实际)函数时,您的中间函数 依次,被调用两次,然后两次打印“垃圾邮件”。
答案 3 :(得分:0)
do_twice(print_spam)
两次调用print_spam
,print_spam
打印出'spam'
,这就是代码将其打印两次的原因