zoukankan      html  css  js  c++  java
  • 【函数篇】装饰器

    装饰器的作用:

      不想通过修改函数的调用方式,在函数的前后添加功能

    最简单的装饰器:

    def wrapper(f):
        def inner():
            pass
            f()    #执行的是被装饰的函数
            pass
        return inner  #返回的是inner的地址 给到了func
    
    @wrapper   #语法糖@等于func = wrapper(fanc)
    def func():  #被装饰的函数
        pass
    #func = wrapper(fanc) 
    func()        #执行的是inner函数
           

    执行顺序:

     当被装饰的函数有返回值时,由于执行的是inner,所以需要在inner函数里获取被装饰函数的返回值,再通过inner返回出来:

    def wrapper(f):
        def inner():
            pass
            ret = f()  #接收被装饰函数的返回值
            pass
            return ret #返回接收的返回值
        return inner
    
    @wrapper
    def func():
        return None #返回值
    func()

    当被装饰的函数同时需要进行传值时,只需再inner函数里接收即可,接收后同样需要被函数体内的被装饰的函数调用,*args和**kwargs同时使用,可以接收所以类型参数:

    def wrapper(f):
        def inner(*args,**kwargs):
            pass
            ret = f(*args,**kwargs)
            pass
            return ret
        return inner
    
    @wrapper
    def func(a,b,c,d = 1):
        return None
    func(1,2,3,4)

    所以,这就是一个完整的装饰器,即装饰器的固定模式

    注:

    语法糖:

      表达方式:@装饰器函数

    例如上方代码中的@wrapper,等同于func = wrapper(func)这句代码

  • 相关阅读:
    从键盘输入10个数,计算出正数和负数的个数。
    浏览器允许的并发请求资源数 优化
    strict 严格模式
    AMD 和 CMD 的区别
    Canvas
    visual filters 滤镜 ie
    ie 如何判断正在执行的脚本
    async
    富文本编辑器
    检测CSS属性 是否支持
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11360081.html
Copyright © 2011-2022 走看看