闭包装饰

闭包:
1.函数内嵌套函数
2.内部函数引用外部函数的局部变量
3.外部函数的返回值是内部函数
闭包的缺点:
由于内部函数引用了外部函数的局部变量,导致外部函数执行完之后,局部变量没有及时释放,占用内存
装饰器的作用:
在不更改原始函数的基础上,为函数添加一些额外功能

不带参数

def run_time(func):
    def test():
        start = datetime.now()
        func()
        print(datetime.now() - start)
    print(type(test))
    return test
# 下面的装饰器 等同于这句话 eat = run_time(eat)
@run_time
def eat():
    print('吃饭了')
# 把eat函数对象传递到run_time函数中
# 当调用eat()函数时,实际上执行的闭包中的test()函数
eat()

携带参数

def premission(form_role):
    # 函数装饰器的开始
    def role(func):
        def test():
            if 3 > form_role:
                func()
            else:
                print('没有权限')
        return test
    return role
# premission(2) 返回role函数对象
# 相当于写了@role
# 装饰器执行完成之后相当于 sleep = role(sleep)
@premission(5)
def sleep():
    print('睡觉了...')
sleep()

# 下面的写法等同于使用装饰器的写法
# 1.执行premission(2)返回role函数
# role = premission(2)
# 2.执行role返回test函数,并赋值给sleep
# sleep = role(sleep)
# 3.执行sleep()就是执行test()
# sleep()

判断用户是否登录的装饰器

def islogin(func)
    def login_function(request,*args,**kwargs):
        if request.session.get('u_name',None):
            return func(request,*args,**kwargs)
        else:
            response=HttpResponseRedirect(settings.LOGIN_URL)
            response.set_cookie('next_url',response.get_full_path())
            return response
    return login_function


@islogin
def center(request):
    return render(request,'center.html')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值