函数拾遗(递归+带参数的装饰器)

递归函数+带参数的装饰器

递归函数

  • 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()
    
posted @ 2020-05-21 17:10  yyyzh  阅读(123)  评论(0编辑  收藏  举报