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
  • 相关阅读:
    基于SSM框架web搜索功能的实现
    使用APICloud打包webapp
    mac如何运行vue项目
    前端和算法实现:给网站上加上自己的水印(以后用上)
    jQuery常用代码片段
    关于vscode的个人配置
    听说你想用git,安装一下咯
    vue创建项目的一种方法
    用js控制css动画效果@keyframes
    axios的封装和拦截
  • 原文地址:https://www.cnblogs.com/fu-1111/p/10119968.html
Copyright © 2011-2022 走看看