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
  • 相关阅读:
    背包问题--动态规划
    day03_13 多分支if语句及作业
    day03_12 缩进介绍
    day03_11 if语句实现猜年龄01
    day03_10 注释及简单的用户输入输出
    day03_09 编码部分历史及文件编码简介
    day03_07 变量的重新赋值01
    day03_06 变量详解
    day03_05 Python程序文件执行和与其他编程语言对比
    day03_04 文件后缀及系统环境变量
  • 原文地址:https://www.cnblogs.com/a2534786642/p/10121413.html
Copyright © 2011-2022 走看看