zoukankan      html  css  js  c++  java
  • 27 Python 装饰器

    一. 我们先写一个玩游戏的步骤

    # def play():
    #     print("双击LOL")
    #     print("选择狂战士")
    #     print("进草丛")
    #     print("崩山击","十字斩")
    我们想添加
      1.开挂
      2.关闭外挂
      目标函数前和后插入一段新代码 不改变原来代码
    # def wrapper(fn):
    #     def inner():
    #         print("开挂")
    #         fn()
    #         print("关闭外挂")
    #     return inner
    #
    # play = wrapper(play)
    #
    # play()

    通用装饰器的语法:

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

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

    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

    带参数的装饰器

    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
  • 相关阅读:
    c# 三层结构的简单理解
    浅析C#鼠标右键如何添加
    三层结构开发的理解
    Windows快捷键大全
    command 中 ExecuteScalar() ExecuteNonQuery ()和ExecuteReader()的用法
    很拽的JSON
    FCKeditor的全局API
    WebForm_DoPostBackWithOptions 丢失的解决
    闭包的错误例子
    XPath学习笔记 XPath数据模型
  • 原文地址:https://www.cnblogs.com/a2534786642/p/10121413.html
Copyright © 2011-2022 走看看