Python_装饰器

2021-05-18 03:31

阅读:689

标签:总结   import   函数名   类型   公司   开发   作用   int   程序   

  Teacher say : 没有任何一家专面python的公司会不提装饰器的

 

os模块:和操作系统做交互的时候

 

#装饰器形成的过程

#装饰器的作用

#原则: 开发封闭原则

#装饰器的固定模式

 

import time

time.sleep(5)  #让程序在执行到这个位置的时候停一会

time.time()  #记录从190年开始到现在 过了多少秒

 

什么是装饰器?

在不修改函数调用方式的情况下, 但是还想在原来的函数前后添加功能

timer就是一个装饰器函数,只是对一个函数有一些装饰功能

例:

    

    def timer(f) :           #是一个装饰器函数

      def inner(*args,**kwargs) :     #*args 传进去的是一个元组,传进去一个动态参数     (*args,**kwargs)可以覆盖所有的动态参数类型

        start = time.time()

        f(*args,**kwargs)     #被装饰的函数

        end = time.time()

        print( end - start)

      return inner

   @timer      #语法糖   @装饰器函数名,  定义在被装饰函数的上一行

   def func() :      #被装饰的函数

      time.sleep(0.01)

      print(‘装饰器学习‘)

 #  func = timer(func)    #加入语法糖@timer  此句则省略

    func()

#原则: 开放封闭原则

#  开放:对扩展是开放的

#  封闭:对修改是封闭的

#  封版

 

被装饰函数的返回值问题: 

  因为被装饰函数的 @timer(语法糖),因而被修饰函数地址改变,所以被修饰函数的返回值拿不到,需要在装饰器最后return 被修饰函数

  被装饰函数传参问题 : 需要用装饰带参数函数的装饰器

 

总结:装饰器的固定模式

 

  def wrapper(f) :

    def inner(*args,**kwargs) :

      #在被装饰函数之前要做的事

      ret = f(*args,**kwargs)

      #在被装饰函数之后要做的事情

      return ret

    return inner

 

Python_装饰器

标签:总结   import   函数名   类型   公司   开发   作用   int   程序   

原文地址:https://www.cnblogs.com/Py-Raid/p/9745283.html


评论


亲,登录后才可以留言!