zoukankan      html  css  js  c++  java
  • 初识装饰器

    装饰器:

    def test():
        print(123)
    
    def wrapper(func):  # 装饰器函数
        def inner():
            print("before")
            func()  # 执行test函数(被装饰的函数)
            print("after")
        return inner  # 返回inner的内存地址
    
    ret = wrapper(test)  # 返回值为inner,则inner的内存地址赋给ret
    ret()  # 实际调用inner函数

    装饰器的作用:在不改变函数调用方式的基础上,在被装饰的函数的前、后添加功能

    开放封闭原则:

    1. 开放:对扩展是开放的
    2. 封闭:对修改是封闭的

    进一步了解装饰器:

    1. 使用"语法糖"装饰函数,使用方式:@装饰器函数名
    2. @装饰器函数名,要紧紧贴在被装饰函数的上面,用来修饰被装饰函数
    def wrapper(func):  # 装饰器函数
        def inner():
            print("before")
            ret = func()  # 执行test函数(被装饰的函数)
            print("after")
            return ret  # #返回被装饰函数的返回值
        return inner  # 返回inner的内存地址
    
    @wrapper  # 相当于执行 test = wrapper(test)
    def test():
        print(123)
        return "ABC"  # 通过inner()函数返回自己的返回值
    
    ret = test()
    print(ret)

    装饰"带参数函数"的装饰器:

    def wrapper(func):  # 装饰器函数
        def inner(*args, **kwargs):
            print("before")
            ret = func(*args, **kwargs)  # 执行test函数(被装饰的函数)
            print("after")
            return ret  # #返回被装饰函数的返回值
        return inner  # 返回inner的内存地址
    
    @wrapper  # 相当于执行 test = wrapper(test)
    def test(param):
        print(123)
        return param  # 通过inner()函数返回自己的返回值
    
    ret = test("ABC")
    print(ret)

    装饰器:

    def wrapper(func):
        def inner(*args, **kwargs):
            """在被装饰函数之前要做的事"""
            ret = func(*args, **kwargs)
            """在被装饰函数之后要做的事"""
            return ret
        return inner
  • 相关阅读:
    1
    vim配置
    pyspark
    添加底部小火箭+目录
    00
    博客园代码高亮设置
    01. 枚举类型
    01. 授权问题
    Android Studio打包签名全过程
    linux 阿里云源地址
  • 原文地址:https://www.cnblogs.com/believepd/p/9567096.html
Copyright © 2011-2022 走看看