python装饰器学习笔记

什么是装饰器?为什么要使用装饰器?

使用装饰器可以让给我们的函数在执行之前或者执行之后添加一些代码,举个例子,当我们使用CSDN写博客或者编辑我们的个人资料的后台肯定要先判断我们是否登录,如果不使用装饰器,我们就必须要在写博客这个函数write_article()和edit_user()这两个函数的开头写分别一段代码判断是否已经登录,当功能较多时,这样是非常难以维护的。

装饰器代码举例

user = {
    'is_login':True
}
#装饰器的使用


def login_required(func):
    #装饰器
    def wrapper(*args,**kwargs):
        if user['is_login'] == True:
            func(*args,**kwargs)
        else:
            print('跳转到登录页面')
    return wrapper

@login_required
def write_atrticle(title,content):
    """
    用于模拟写博客
    """
    print('博客发表成功,标题:{},内容:{}'.format(title,content))

@login_required
def edit_user(uesr_name):
    """
    用于模拟编辑个人信息
    """
    print('个人信息编辑程功,新的同户名:{}'.format(uesr_name))

edit_user('lihua')
#个人信息编辑程功,新的同户名:lihua
write_atrticle('blog','hello,world!')
#博客发表成功,标题:blog,内容:hello,world!

传参数的装饰器

#给装饰器传递参数
user = {
    'is_login':False
}

def login_required(site = 'front'):
    #装饰器
    def outter_wrapper(func):
        def inner_wrapper(*args,**kwargs):
            if user['is_login'] == True:
                func(*args,**kwargs)
            else:
                if site == 'front':
                    print('跳转到前台登录页面')
                else:
                    print('跳转到后台登录界面')
        return inner_wrapper
    return outter_wrapper

@login_required('inner')
#login_required('inner')执行后返回outter_wrapper,相当于@outter_wrapper
def write_atrticle(title,content):
    """
    用于模拟写博客
    """
    print('博客发表成功,标题:{},内容:{}'.format(title,content))

@login_required('front')
def edit_user(uesr_name):
    """
    用于模拟编辑个人信息
    """
    print('个人信息编辑程功,新的同户名:{}'.format(uesr_name))

edit_user('lihua')
#跳转到前台登录页面
write_atrticle('blog','hello,world!')
#跳转到后台登录界面

wraps装饰器的使用

使用wraps装饰器可以使被装饰器装饰的函数的__name__属性不发生变化,用法如下:

from functools import wraps
user = {
    'is_login':True
}
#装饰器的使用


def login_required(func):
    #装饰器
    @wraps(func)
    def wrapper(*args,**kwargs):
        if user['is_login'] == True:
            func(*args,**kwargs)
        else:
            print('跳转到登录页面')
    return wrapper

@login_required
def write_atrticle(title,content):
    """
    用于模拟写博客
    """
    print('博客发表成功,标题:{},内容:{}'.format(title,content))

@login_required
def edit_user(uesr_name):
    """
    用于模拟编辑个人信息
    """
    print('个人信息编辑程功,新的同户名:{}'.format(uesr_name))


print(edit_user.__name__)
#edit_user,若不使用wraps装饰器则会打印wrapper
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值