装饰器

作者: qianranow | 来源:发表于2018-05-02 08:59 被阅读77次

0. 概念


  • 理解:在 函数名 以及 函数体 不改变 的前提下,给函数 扩展 一些 额外代码
    @装饰器
    def 被装饰函数():
        code
    
  • 示例
    def check(func):
        def inner():
            print("登录验证...")
            func()
        return inner
    
    @check
    def send_message():
        print("发说说")
    
    send_message()
    

1. 执行时间


  • 立即执行
    def check(func):
      print("哥哥被执行了")
      def inner():
          print("登录验证...")
          func()
      return inner
    # @check -> send_message = check(send_message)
    @check
    def send_message():
        print("发说说")
    
  • 执行图解 执行图解.png

2. 进阶操作


  • 装饰器叠加:从上到下 装饰,从下到上 执行
    def line(func):
        def inner():
          print("-" * 30)
          func()
        return inner
    def star(func):
        def inner():
            print("*" * 30)
            func()
        return inner
    @line
    @star
    def print_content():
        print("一杯敬明天,一杯敬过往。")
    print_content()
    
  • 对有参数函数进行装饰
    1. 无论什么场景,保证函数调用参数个数一致
    2. 为了通用,可以使用不定长参数,结合拆包操作进行处理
    
    def decorator(func):
        def inner(*args, **kwargs):
            print("-" * 30)
            func(*args, **kwargs)
        return inner
    
    @decorator
    def print_num(num, num2, num3):
        print(num, num2, num3)
    
    @decorator
    def print_num2(num):
        print(num)
    
    print_num(666, 888, num3=100)
    print_num2(333)
    
  • 对有返回值函数进行装饰
    1. 无论什么场景,保证函数返回值一致
    
    def decorator(func):
        def inner(*args, **kwargs):
            print("-" * 30)
            res = func(*args, **kwargs)
            return res
        return inner
    
    @decorator
    def print_num(num, num2, num3):
        return num + num2 + num3
    
    @decorator
    def print_num2(num):
        print(num)
    
    res1 = print_num(666, 888, num3=100)
    res2 = print_num2(333)
    print(res1, res2)
    
  • 带有参数装饰器
    1. 语法:@获取装饰器函数名(参数)
    2. 流程:先计算 @ 后面函数,然后把函数返回值当做装饰器
    
    def get_decorator(char):
        def decorator(func):
            def inner(*args, **kwargs):
                print(char * 30)
                res = func(*args, **kwargs)
                return res
            return inner
        return decorator
    
    @get_decorator("+")
    def pnum(num):
        print("66666")
    
    pnum("66666")
    

相关文章

  • 装饰器

    """@装饰器- 普通装饰器- 带参数的装饰器- 通用装饰器- 装饰器装饰类- 内置装饰器- 缓存装饰器- 类实现...

  • typescript 五种装饰器

    装饰器类型 装饰器的类型有:类装饰器、访问器装饰器、属性装饰器、方法装饰器、参数装饰器,但是没有函数装饰器(fun...

  • python——装饰器详解

    一、装饰器概念 1、装饰器 装饰器:一种返回值也是一个函数的函数,即装饰器。 2、装饰器目的 装饰器的目的:装饰器...

  • Python装饰器

    Python装饰器 一、函数装饰器 1.无参装饰器 示例:日志记录装饰器 2.带参装饰器 示例: 二、类装饰器 示例:

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

  • 装饰器

    装饰器 decorator类装饰器 带参数的装饰器 举例(装饰器函数;装饰器类;有参与无参) https://fo...

  • TypeScript装饰器

    前言 装饰器分类 类装饰器 属性装饰器 方法装饰器 参数装饰器需要在tsconfig.json中启用experim...

  • python之装饰器模版

    装饰器的作用:装饰器即可以装饰函数也可以装饰类。装饰器的原理:函数也是对象 1.定义装饰器 2.使用装饰器假设de...

  • 装饰器实验

    装饰器实验 说明 ts内包含了四个装饰器,类装饰器、属性装饰器、函数装饰器、参数装饰器,本文中测试一下其的使用。 ...

  • python3基础---详解装饰器

    1、装饰器原理 2、装饰器语法 3、装饰器执行的时间 装饰器在Python解释器执行的时候,就会进行自动装饰,并不...

网友评论

      本文标题:装饰器

      本文链接:https://www.haomeiwen.com/subject/owjqrftx.html