Think Python Exercise 3.2

函数对象是一个可以赋值给变量的值, 也可以作为实参传递。 例如, do_twice 函数接受函数对象作为实参,并调用这个函数对象两次:

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

下面这个示例使用 do_twice 来调用名为 print_spam 的函数两次。

def print_spam ():
    print('spam ')
    
do_twice(print_spam)
  1. 将这个示例写入脚本,并测试。
  2. 修改do_twice,使其接受两个实参,一个是函数对象,另一个是值。然后调用这一函数对象两次,将那个值传递给函数对象作为实参。
  3. 从本章前面一些的示例中, 将 print_twice 函数的定义复制到脚本中。
  4. 使用修改过的 do_twice ,调用print_twice 两次,将 spam 传递给它作为实参。
  5. 定义一个名为 do_four 的新函数,其接受一个函数对象和一个值作为实参。调用这个函数对象四次,将那个值作为形参传递给它。函数体中应该只有两条语句,而不是四条。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def do_twice(f, argus):
    f(argus)
    f(argus)

def print_twice(bruce):
    print(bruce)
    print(bruce)
    
def do_four(f, argus):
    do_twice(f, argus)
    do_twice(f, argus)
    
do_twice(print_twice, 'spam')
#do_four(print_twice, "spam")