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)这句代码

  • 相关阅读:
    定时器
    表单事件
    闭包,string类,Array类
    构造函数,原型链补充
    Elasticsearch安装(6.4.3版)
    快速配置ssh免密登录
    idea远程debug SpringBoot项目
    java获取一个对象的内存大小
    nginx代理其他网站
    外呼系统实现平均分配策略的实现方式之一
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11360081.html
Copyright © 2011-2022 走看看