为什么这个Python函数打印两次?

时间:2016-06-29 17:59:56

标签: python

我无法理解为什么此代码会打印“垃圾邮件”。两次。

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

def print_spam():
    print('spam')

do_twice(print_spam)

4 个答案:

答案 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_spamprint_spam打印出'spam',这就是代码将其打印两次的原因