Python_装饰器

Posted py-raid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python_装饰器相关的知识,希望对你有一定的参考价值。

  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_装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python-21_装饰器-02_装饰器实现

Python-23_装饰器-04_练习---无参装饰器有参装饰器

Python_装饰器复习_30

基于 Python 类的装饰器,带有可以装饰方法或函数的参数

python装饰器

python 装饰器:装饰器实例内置装饰器