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
  • 相关阅读:
    构建调试Linux内核网络代码的环境MenuOS系统
    关于iOS开发证书的一些总结(很有用)
    iOS原型模式
    iOS不用调用,running time自动执行方法
    关于网络设计服务结构的一些理解
    iOS 6.0之后支持一个页面横屏的方法
    iOS返回一个前面没有0,小数点后保留两位的数字字符串
    CoreData总结
    分享一个复用代码块的博客
    分享一个可以打开沙盒的软件
  • 原文地址:https://www.cnblogs.com/believepd/p/9567096.html
Copyright © 2011-2022 走看看