zoukankan      html  css  js  c++  java
  • Python函数的装饰器

    函数的装饰器.

    1. 装饰器

      开闭原则:

            对功能的扩展开放

            对代码的修改是封闭

        通用装饰器语法:

    def wrapper(fn):
        def inner(*args, **kwargs): # 聚合
            """在目标函数之前的内容"""
            ret = fn(*arg, **kwargs) # 打散
            """在目标函数之后的内容"""
            return ret
        return inner
    @wrapper
    def func():
        pass
    func()

    2. 同一个函数被多个装饰器装饰

    就近原则

    def wrapper1(fn):
        def inner(*args, **kwargs):
            print("1")
            ret = fn(*args, **kwargs)
            print("2")
            return ret
        return inner
    
    def wrapper2(fn):
        def inner(*args, **kwargs):
            print("3")
            ret = fn(*args, **kwargs)
            print("4")
            return ret
        return inner
    
    def wrapper3(fn):
        def inner(*args, **kwargs):
            print("5")
            ret = fn(*args, **kwargs)
            print("6")
            return ret
        return inner
    # 顺序 1 2 3  func 3 2 1
    @wrapper1
    @wrapper2
    @wrapper3
    def func():
        print("我是谁,我在哪")
    func()  # 1 3 5 我是谁,我在哪 6 4 2

    3. 带参数的装饰器

         

    def wrapper_out(参数):
            def wrapper(fn):
                def inner(*args, **kwargs): # 聚合
                    """在目标函数之前的内容"""
                    ret = fn(*arg, **kwargs) # 打散
                    """在目标函数之后的内容"""
                    return ret
                return inner
            return wrapper
    @wrapper_out(实参)  # 执行的时候. 先执行函数的调用然后使用返回值和前面的@组合成装饰器语法糖
    def func():
        pass
  • 相关阅读:
    int (*p)[10] 与*p[10]的区别
    运算顺序
    关于linux开机进入grub问题的解决方法
    对于特殊字符串的处理方法
    学习进度条
    阅读《实例化需求》4-6章有感
    学习进度条
    阅读《实例化需求》1-3章有感
    问题账户需求分析
    2016年秋季个人阅读计划
  • 原文地址:https://www.cnblogs.com/fu-1111/p/10119968.html
Copyright © 2011-2022 走看看