浅谈python中装饰器

python中的装饰器

为什么要用装饰器

因为装饰器可以在在不改变函数结构的情况加给函数添加新的功能

1.普通装饰器

def set_func(func):
    def inner():
        print("----1-----")
        func()
    return inner
@set_func  # test = set_func(test)
def test():
    print("这是被装饰的函数")
test()

"""输出结果"""
# ----1-----
# 这是被装饰的函数

"""代码分析"""
# 1.首先python程序从上到下运行
# 2.运行带装饰器@set_func的时候实际上执行的是test = set_func(test()),函数set_func(func)中的参数func指向test函数
# 3.最后执行test()函数,其实就是执行set_func(func)(),即执行inner(),然后就是执行func(),即执行test()

两个装饰器装饰一个函数

def add_qx(func):
    print("---开始进行装饰权限1的功能---")
    def inner(*args,**kwargs):
        print("---这是权限验证1---")
        return func(*args,**kwargs) + "++++"
    return inner

def add_xx(func):
    print("---开始进行装饰权限xx的功能---")
    def inner(*args,**kwargs):
        print("---这是权限验证xx---")
        return func(*args,**kwargs) + "----"
    return inner
"""输出结果"""
---开始进行装饰权限xx的功能---
---开始进行装饰权限1的功能---
---这是权限验证1---
---这是权限验证xx---
------test1------
haha----++++

# 多个装饰器装饰同一个函数,下边的装饰器先装饰
@add_qx  # test = set_func(test)
@add_xx
def test1(*args,**kwargs):
    print("------test1------")
    return "haha"
print(test1())

"""流程"""
# python中程序是从上到向下顺序执行的,当碰到@add_qx装饰器的时候,因为装饰器装饰的是函数,而装饰器@add_qx
# 下边是@add_xx,不是个函数,所以程序继续向下执行,到@add_xx装饰器,下边是test1()函数,所以装饰器@add_xx
# 装饰器开始进行装饰,最后装饰成add_xx(test1())这样的一个函数,此时满足了装饰器@add_qx下边是函数的条件,
# 所以@add_qx开始进行装饰,只不过现在装饰的函数对象发生了改变,变成了add_xx(test1())函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值