递归函数+带参数的装饰器
递归函数
-
python递归的最大深度为1000层:为了节省内存空间,不要让用户无限使用空间(前端可以调用无数次)
-
递归要尽量控制次数,如果要很多层才能解决问题,不适合用递归解决
-
循环与递归的关系
- 递归不是万能的,递归比起循环来说更占内存
-
修改递归层数
import sys old=sys.getrecursionlimit() #获取最深递归层数 print(old) sys.setrecursionlimit(100000000) #修改最深递归层数为100000000层 cnt=0 def func(): global cnt cnt+=1 print(cnt) func() print('999') func()
-
怎么让递归函数停下来
- 一个递归函数要想结束,必须在函数内写一个return,并且return的条件必须是一个可达到的条件
import sys sys.setrecursionlimit(100000) cnt=0 def func(): global cnt if cnt==3: sys.exit()/return print(cnt) cnt += 1 func() print('345')func()
带参数的装饰器
-
带参数的装饰器:
#带参数的装饰器示例 def outer(cont): def wrapper(f): def inner(*args,**kwargs): re=f(*args,**kwargs) return re return inner return wrapper @outer(content)
import time def outer(flag): def wrapper(f): def inner(*args,**kwargs): start=time.perf_counter() re=f(*args,**kwargs) if flag: t=time.perf_counter()-start print('执行{}函数花费了{:.7f}s'.format(f.__name__,t)) else: pass return re return inner return wrapper @outer(True) #带参数的装饰器(语法糖) def f1(): print('f1函数执行成功') @outer(False) def f2(): a=1 b=2 c=3 print(a,b,c) f1() f2()