从零开始学python之装饰器

装饰器

  • 创建几个函数
def add(a,b):

   '''

        求任意两个数的和

   '''

   print("计算开始..")

   r = a+b

   print("计算结束...")

   return r



def mul(a,b)

    '''

       求任意两个数的积

    '''

    return a*b

希望函数可以在计算前,打印开始计算,计算结束后打印计算完毕

我们可以直接通过修改函数中的代码来完成这个需求,但是会产生以下一些问题:

1.如果要修改的函数过多,修改起来比较麻烦

2.并且不方便后期的维护

3.并且这样会违反开闭原则(OCP)

程序的设计,要求开放对程序的扩展,要关闭对程序的修改

在不修改原函数的情况下,来对函数进行扩展

def fn():

   print("我是fn的函数...")

#只需根据现有的函数,来创建一个新的函数

def fn2():

   print("函数开始执行...")

   fn()

   print("函数执行结束...")



def new_add(a,b):

    print('计算开始...')

    r = add(a,b)

    print('计算结束...')

    return r

r = new_add(111,222)

print(r)


上面的方式,已经可以在不修改源代码的情况下对函数进行扩展了,但是这种方式要求我们每扩展一个函数就要手动创建一个新的函数,比较麻烦,为了解决这个问题,我们创建一个函数,让这个函数可以自动的帮助我们生产函数

def begin_end(old):

    ''' 用来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束

      参数:old 要扩展的函数对象

    '''

    #创建一个新函数

    def new_function(*args,**kwargs):

            print('开始执行...')

            #调用被扩展的函数

            res = old(*args,**kwargs)

            print('执行结束...')

            return res

    #返回新的函数

     return new_function



f = begin_end(fn)

print(f())

像begin_end()这种函数我们就称它为装饰器

  • 通过装饰器,可以在不修改原来函数的情况下来对函数扩展,在开发中我们都是通过装饰器来扩展函数的功能的

  • 在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数,可以同时为一个函数指定多个装饰器,这样函数将会按照由内向外的顺序被装饰

@begin_end

@fn3

def say_hello():

   print("大家好...")
#一个实例
... @begin_end
... @ha
... def say_hello():
...     print("大家好...")
...     
say_hello()
开始执行...
ha开始执行...
大家好...
ha执行结束...
执行结束...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小鱼儿LY

一切随缘

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

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

打赏作者

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

抵扣说明:

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

余额充值