闭包函数和装饰器

一、闭包函数

  1.定义在函数内部的函数

  2.内部函数引用了外部函数名称空间作用域的名字

  主要满足上面的两点都叫做闭包函数

  

  顾名思义,函数里面包了个函数

  闭包用于给里面函数传参

  函数传参两种情况:

        1、直接传参

        2、闭包

  闭包函数运行步骤图:

 

 

二、装饰器

  1.含义

    用修饰器原因:修饰函数,是函数更好用(添加新的功能)

    因旧函数添加新功能,不可改调用方式,又不能改旧函数(被修饰对象)源代码

    即两个原则

      1.不改变被装饰对象源代码

      2.不改变被装饰对象(可调用对象)调用方式

def index(): 
      print('x')       #原始函数    
#outter+inner函数组成index  函数的装饰器
def outter(func)      #  func = 最原始的index函数的内存地址
    def inner(*args,**kwargs)
        func()       #func = index函数的内存地址,加()直接调用
        print('y')
    return inner  
index = outter(index)  # outter (最原始的index函数内存地址)
# index指向 inner函数的内存地址
index()  

  2.装饰器 语法糖

   作用:不改变最原始函数的

  @+下层函数名   #  函数名 = 修饰函数名(函数名)

    装饰器在装饰的时候 顺序从下往上

    装饰器在执行的时候 顺序从上往下

@outter1  # index = outter1(func2)
@outter2  # func2 = outter2(func1)
@outter3  # func1 =  outter3(index)
def index():
    pass

 

  3.装饰器固定格式

1 def outter(func):
2     def inner(*args,**kwargs):
3         print('执行被装饰函数之前 你可以做的操作')
4         res = func(*args,**kwargs)
5         print('执行被装饰函数之后 你可以做的操作')
6         return res
7     return inner

    4、装饰器修复技术

    from functools import wraps

    def  outter(func):

      @wraps(func)

      def ...

    1.返回原来的函数的函数名

    2.返回原来的函数的注释

 

转载于:https://www.cnblogs.com/xiaowangba9494/p/11173011.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值