import os,sys
# 题目1 斐波那契数列
# 从第三项开始 每一项等于前两项的和 求第n项
# 1 1 2 3 5 8 13 21
sys.setrecursionlimit(100000)
#未优化
# 函数装饰
def memo(func):
cache={}
def wrap(*args):
if args not in cache:
cache[args]=func(*args)
return cache[args]
return wrap
# 此语句等于fibonacci方法上面的注释
# fibonacci=memo (fibonacci)
@memo
def fibonacci(n):
if(n<=2):
return 1
return fibonacci(n-1)+fibonacci(n-2)
#代码优化过 加缓存
def fibonacciCache(n,cache=None):
if cache is None:
cache={}
if n in cache:
return cache[n]
if(n<=2):
return 1
cache[n]=fibonacciCache(n - 1,cache) + fibonacciCache(n - 2,cache)
return cache[n]
print(fibonacci(50))
# 题目2
# 一共有n个台阶的楼梯 从下面走到上面,一次只能迈1-3个台阶 并且不能后退,走完这个楼梯共有多少种方法
@memo
def climp(n,steps):
count=0;
if n==0:
count=1
elif n>0:
for step in steps:
count+=climp(n-step,steps)
return count
print(climp(10,(1,2,3)))
如何使用函数装饰器?
实际案例
某些时候我们想为多个函数,统一添加某种功能,比如计时统计,记录日志,缓存结果等等。
我们不想在每个函数内一一添加完全相同的代码,有什么好的解决方案?
定义装饰器函数,用它来生成一个在原函数基础添加了新功能的函数,替代原函数。