递归调用为什么不调用自己,而调用装饰函数?

来源:9-1 如何使用函数装饰器

大发多一点

2017-10-16

def memo(func):
   print 'memo'
   cache = {}
   def wrap(*args, **kwargs):
       if args not in cache:
           print args
           cache[args] = func(*args, **kwargs)
           print func.__name__  # fibonacci
       return cache[args]

   return wrap


def fibonacci(n):
   if n <= 1:
       return 1
   print fibonacci.__name__    # wrap 为什么不调自己,而调用 fibonacci=memo(fibonacci)
   return fibonacci(n - 1) + fibonacci(n - 2)

fibonacci=memo(fibonacci)

print fibonacci(20)

写回答

1回答

程序员硕

2017-10-16

fibonacci整个被替换成被装饰了的函数

0
0

Python高效编程技巧实战

精选50个Python案例,源自实战,全面提升Python编程能力

2582 学习 · 360 问题

查看课程