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

    装饰器 -面试必需品

    • 不想修改函数的调用方式,但是还想在原来函数前后添加功能
      • 装饰器实际运行模式的模拟
      import time
      
      #定义被装饰的函数
      def func():
          print('我测试函数的运行速度')
          
      #定义装饰器,必须是闭包
      def timer(f):
          def func():
              start = time.time()
              time.sleep(1)
              f()
              end = time.time()
              print(end - start)
          return func
      #调用
      func = timer(func)  
      func()  让其看起来像是直接调用的函数func达到测试时间的效果
      
    • 语法糖
      • 真正使用装饰器
      import time
      
      #定义装饰器
      def timer(f):
          def func():
              start = time.time()
              time.sleep(1)
              f()
              end = time.time()
              print(end - start
          return func
          
      @timer  #采用装饰器的效果
      def func():
          print('我测试函数的运行速度')
      #调用
      #func = timer(func)  这句话直接用 @装饰器名 代替
      func()  #采用装饰器后直接调用原函数就行
      

    装饰器的形成过程

    • 最简单的>>有返回时的>>有一个参数的>>万能参数

    装饰器的作用

    原则:开放封闭原则

    • 开放
      • 对扩展是开放的,函数对外扩展是开放的
    • 封闭
      • 对修改是封闭的,函数一但定义并确认不能轻易的修改或者不修改

    装饰器的固定模式

    • 装饰器实际是调用装饰器内部函数
    #定义装饰器
    def wrapper(f): #f是被装饰的函数
        def inner(*args, **kwargs): 
            '''执行被装饰的函数之前需要执行的'''
            ret = f(*args, **kwargs)
            '''执行被装饰的函数之后需要执行的'''
            return ret
        return inner
        
    @wrapper  #调用装饰器
    def func()  
        pass
    #调用
    func()  #实际上是调用inner()
    
  • 相关阅读:
    QR code 乱谈(一)
    用JAVA实现数字水印(可见)
    ctf总结
    Unix/Linux常用命令
    C语言概述
    C语言发发展历史
    为什么要学习C语言
    计算机应用领域
    计算机发展趋势
    如何学习计算机
  • 原文地址:https://www.cnblogs.com/liliudong/p/9572742.html
Copyright © 2011-2022 走看看