python---装饰器

# 创建几个函数
def fn():
    print("这是一个fn函数")


def add(a, b):
    return a+b


def mul(a, b):
    return a*b

# 需求:扩展上面几个函数,在每个函数执行前后进行打印。
# 思路一:在原来的函数上进行修改;思路二:手动创建新函数,在新的函数里面加入打印,同事调用要扩展的函数
# 按照上面的思路做会有如下的问题:
# 1.思路一,二如果修改的函数过多,手动修改起来比较麻烦
# 2.思路一这样做会违背程序的开闭原则。(实际开发中核心或者基础代码不希望被修改)

# 按思路二创建了一个新函数,扩展fn

def fn1():
    print("开始执行函数..")
    fn()
    print("函数执行结束..")


def fn2(a, b):
    print("开始执行函数..")
    r = add(a, b)
    print("函数执行结束..")
    return r


def fn3(a, b):
    print("开始执行函数..")
    r = mul(a, b)
    print("函数执行结束..")
    return r

# 上面扩展了3个函数,都达到了要求,就是每次手动创建太麻烦了并且没有通用性。
# 下面我们通过自动的方式创建新函数,免去每次手动创建新函数


# 自动创建函数的函数,
# 传参:待扩展的函数。
def auto_create(to_be_expand_func):
    # 扩展后的函数
    def new_function(*args, **kwargs):
        # 扩展的功能:打印.....
        print("开始执行函数..")
        # 调用待扩展的函数
        r = to_be_expand_func(*args, **kwargs)
        # 扩展的功能:打印.....
        print("函数执行结束..")
        return r
    return new_function

# 上面其实就是一个装饰器,实际用的时候可以按如下方法用.
# @装饰器函数,对函数进行扩展了,div不仅仅是原来的函数,而是扩展后的函数
@ auto_create
def div(a, b):
    return a/b

if __name__ == "__main__":
    # fn1()
    print(fn2(123, 456))
    print(fn3(100, 20))
    f1 = auto_create(add)
    r1 = f1(123, 456)
    print(r1)
    f2 = auto_create(mul)
    r2 = f2(100, 20)
    print(r2)
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想要飞得更高

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值