Python装饰器

闭包

  • 闭包:两个函数嵌套,外层函数返回内层函数的引用,外层函数必须要带参
  def 外部函数(参数):
      def 内部函数():
         pass
      return 内部函数

  • 与函数之间的区别:

            1.格式两个函数嵌套

            2.闭包外部函数的参数可以在内存中保持

装饰器

  • 装饰器是什么:闭包加@xxx
  •  装饰器的作用:在不改变原先的函数值跟调用的方式,添加额外的功能
  • 装饰器的代码:
    def set_fun(func):
        def call_fun(*args,**kwargs):
            return func(*args,**kwargs)

        return call_fun

    @set_fun    
    def test():
        pass

装饰器图解

两个装饰器装饰一个函数图解

类装饰

1.格式

  class  类名(objec):
      def __init__():  @初始化类的时候执行
          pass

      def __call__():   装饰后的调用执行
          pass 

2.例子

  class A(object):
  def __init(self,fun)
     self.fun = fun

  def __call(self)
    print("添加额外功能")
    return self.fun()

  @A
  def test():
    print("test")

  test()

装饰器传参

1. 三个函数嵌套,第三层内部包含一个闭包,第三层返回闭包的引用

  def set_args(参数):

      def set_fun(func):

         def call_fun(*args,**kwargs):
            return func(*args,**kwargs)
         return call_fun

      return set_fun

  @set_args("参数)
  def test():
      pass

2.例子

  def print_args(args):
      print(args)

      def set_fun(fun):

          print("第二层")

          def call_fun(*args,**kwargs):
                print("第一层")
          return fun(*args,**kwargs)

      return call_fun

  return set_fun

  @print_args("haha")  ——语法糖执行流程: ① print_args("haha") 调用该函数  ② test = set_fun(test)
  def test():
     print("test")

  test()



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值