• 装饰器


    装饰器

    1.形式

    • 装饰器是有python 的@语法和闭包的知识结合使用的

    • 常见的装饰器形式

      def outer(origin):
          def inner():
              '''你猜'''
              print("啊哈哈")#函数执行前
              res=origin()
              print("啊哈哈哈")#函数执行后
          return inner # 返回原函数并且不带括号
      @outer   # 相当与执行 func=outer(func)
      def func():
          print("aaa")
      func()
      
    • def 外函数(函数):
          def 内函数():
              函数()
          return 内函数    
      

    2.带参数的装饰器

    • 函数的参数可以有很多,为了接收任意的参数使用的参数是*args**kwargs

    • def outer(origin):
          def inner(*args,**kwargs):
              '''你猜'''
              print("啊哈哈")#函数执行前
              res=origin(*args,**kwargs)
              print("啊哈哈哈")#函数执行后
          return inner # 返回原函数并且不带括号
      @outer   # 相当与执行 func=outer(func)
      def func():
          print("aaa")
      func()
      

    3.装饰器的扩展

    3.1 补充内置函数
    def admin():
        '''这是一个管理员函数'''
        print("adminxxxxx")
    
    # 获取函数的名字
    print(admin.__name__)
    # 获取函数中的注释
    print(admin.__doc__)
    

    image-20211129111254800

    • 被装饰器修饰后
    • def outer(orign):
          def inner(*args,**kwargs):
              '''这是装饰器内的函数'''
              res=orign(*args,**kwargs)
          return inner
      
      @outer
      def admin():
          '''这是一个管理员函数'''
          print("adminxxxxx")
      
      # 获取函数的名字
      print(admin.__name__)
      # 获取函数中的注释
      print(admin.__doc__)
      
    • image-20211129111833611

    • 经过装饰器修饰后,获得的函数名是装饰器内的函数名与注释,被装饰的函数相当于为函数前后添加功能

    3.2 functools
    • import functools
      
      def outer(orign):
          # inner.__name__=orign.__name__;inner.__doc__=orign.__doc__;
          @functools.wraps(orign)
          def inner(*args,**kwargs):
              '''这是装饰器内的函数'''
              res=orign(*args,**kwargs)
          return inner
      
      @outer
      def admin():
          '''这是一个管理员函数'''
          print("adminxxxxx")
      
      # 获取函数的名字
      print(admin.__name__)
      # 获取函数中的注释
      print(admin.__doc__)
      
    • image-20211129112724330

    • 因此:编写装饰器的时候可以加上@functools.wraps(函数参数)

    天雨虽宽不润无根之草,学习虽难勤奋可达巅峰;

  • 相关阅读:
    TensorFlow学习笔记(四)——TensorFlow运作方式入门、可视化
    Tensorflow学习笔记(三)——深入MNIST
    Tensorflow学习笔记(二)——MNIST机器学习入门
    TensorFlow学习笔记(一)
    【HTML打卡】0125 实战首页布局之导航
    【HTML打卡】0123 HTML语义标签
    【HTML打卡】0119css 文字、图片、控制器、引入方式、初始化
    面试题目总结
    kafka学习知识点总结(三)
    kafka学习知识点总结(二)
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/15618626.html
Copyright © 2020-2023  润新知