美文网首页
如何在python开发中使用装饰器(一)

如何在python开发中使用装饰器(一)

作者: panxd | 来源:发表于2017-07-04 22:53 被阅读0次
  • ?为什么要使用装饰器

    • 在软件开发的过程中,我们发现经常用到重复的代码,这就大大的增加了开发的周期,为了使得开发更为高效,python中主要特性之一就是装饰器。(修改/生成/包装经常使用的代码
  • ?如何自己编写一个装饰器函数

    • 有时候,我们会遇到这样的问题,事先已经写好某些函数,但是想要在这些函数的基础上添加一些额外的功能(登录验证/记录日志/生成时间戳
    • 定义一个装饰器函数:
>>> import time
>>> from functools import wraps
>>> 
>>> 
>>> def timeabout(func):
    '''定义一个装饰器用来生成执行某函数需要的时间戳'''
    @wraps(func)
    def wrapper(self, *args, **kwargs):
        s = time.time()  #开始时间
        result = func(self, *args, **kwargs) #func指的未被装饰的原始函数
        e = time.time()  #结束时间
        print(func.__name__,e - s)  #打印两部分内容(被装饰的函数名,需要的时间戳)
        return result
    return wrapper

  • 使用此装饰器
>>>@timeabout       #使用此装饰器对下列阶乘函数进行包装处理
      def factorial(n):      
      if n == 1:
          return 1
      else:
          return factorial(n-1)*n
>>>
>>> factorial(10)
factorial 0.0
factorial 0.05403733253479004   #经过装饰器处理的阶乘函数
factorial 0.06404519081115723
factorial 0.07304859161376953
factorial 0.08205389976501465
factorial 0.0930624008178711
factorial 0.10106801986694336
factorial 0.10907340049743652
factorial 0.11607766151428223
factorial 0.12308287620544434
3628800       #阶乘函数的结果
>>> 

  • 装饰器即函数,可以接受函数作为输入,并且返回一个新的函数作为输出。
#方法一和方法二执行后效果一样
#方法一
@timeabout       
def factorial(n):       
    if n == 1:
        return 1
    else:
        return factorial(n-1)*n

#方法二

```python
def factorial(n):       
    if n == 1:
        return 1
    else:
        return factorial(n-1)*n
factorial = timeabout(factorial)
  • 装饰器内部创建了一个新的函数(如wrapper),*args, **kwargs用来接收任何形式的输入参数。如需了解python中的函数如何使用,请浏览本作者关于函数的文章。
  • 在此函数wrapper内部,需要调用原来的函数(需要装饰的函数),将其作为参数输入,并返回结果。
  • 可以添加额外的代码,实现其它的方法。
  • 新的函数(如wrapper)会作为此装饰器的结果返回,取代原来的函数。

相关文章

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

  • 如何定义类方法和静态方法?(转译)

    要在python中定义类方法,我们使用@classmethod装饰器,并使用@staticmethod装饰器定义静...

  • 利用Python装饰器来组织Tensorflow代码的结构

    装饰器 定义Python装饰器 装饰器是一种设计模式, 可以使用OOP中的继承和组合实现, 而Python还直接从...

  • Python 高级编程 装饰器

    1.1装饰器 装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中...

  • 如何在python开发中使用装饰器(一)

    ?为什么要使用装饰器在软件开发的过程中,我们发现经常用到重复的代码,这就大大的增加了开发的周期,为了使得开发更为高...

  • Python 装饰器

    python 装饰器装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python...

  • python装饰器何时执行?

    python装饰器,使用python作为开发的小伙伴一定不会陌生,但是有没有思考过装饰器的执行原理及过程呢?下面我...

  • 函数装饰器(Function Decorators)

    函数装饰器(Function Decorators) python中函数装饰器的使用和Java中注解类似, 直接在...

  • 装饰器模式

    介绍 在python装饰器学习 这篇文章中,介绍了python 中的装饰器,python内置了对装饰器的支持。面向...

  • python 装饰器

    装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但...

网友评论

      本文标题:如何在python开发中使用装饰器(一)

      本文链接:https://www.haomeiwen.com/subject/lqhocxtx.html