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

    装饰器

    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(函数参数)

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

  • 相关阅读:
    Caused by: Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory
    nable to load bean: type:com.opensymphony.xwork2.util.ValueStackFactory
    一个web项目web.xml的配置中<context-param>配置作用
    js获取form的方法
    HTML <legend> 标签
    Struts2 文件上传 之 文件类型 allowedTypes
    Struts2验证框架的配置及validation.xml常用的验证规则
    struts2学习笔记--使用Validator校验数据
    LeetCode204:Count Primes
    《采访中收集程序猿》学习记录5
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/15618626.html
Copyright © 2011-2022 走看看