python 函数--装饰器(decorator)与闭包(closure)

一 .  装饰器

  装饰器用途:为已经存在的函数添加功能

   当需要给已完成函数增加一些功能时,可以直接改动。但有时候对于一个大项目来说改动一处可能会造成其它相关部分报错,利用装饰器可以在不必改动原有函数的前提下增加功能,经常被用于事务处理,日志记录,验证权限,调试测试等有需求的场景

原函数:

def add(x,y):

    return x+y

想在原来的函数上添加返回原始数据的功能,用装饰器怎么实现呢?

 
 
 
第一步: 在decorator函数中定义一个新函数包装传入的函数f,用return f(x,y)添加输出原始数据的功能,
注:装饰器的返回值是一个函数对象
def decorator(f):

     def new_f(x,y):

            print('参数1为%d,参数2为%d'%(x,y))

            return f(x,y)

    return new_f

第二步:在原函数定义前用@引导装饰器函数即可

@decorator

def add(x,y):

    return x+y

 print(add(2,3))

 

二 .  闭包

闭包:若调用某函数时,该函数将其内部定义的函数作为返回值,则所返回的函数成为闭包。装饰器是闭包的一种形式。

在上面例子中,new_f(x,y)就是一个闭包

再举一个简单例子:

inner(y)是嵌套于outer(x)中的内部函数,inner引用了外部作用域变量x,这个内部函数inner 就是一个闭包

代码:

def outer(x):

    def inner(y):

            return x+y

    return inner

 f=outer(5)

print(f(20))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值