python装饰器

  • 装饰器本身是一个函数,作用是对另一个函数进行加工处理
  • 装饰器的参数是函数,返回值也是函数
  • 例如我想记录一个函数的运行用时
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Author:Arthur
from functools import wraps
from time import sleep
from datetime import datetime

#这是一个装饰器函数
def run_time(func):                         ## func作为一个需要运行用时的函数
    @wraps(func)                            ## @wraps这里确保返回后的函数名也是func
    def wraper(*args, **kwargs):            ## 匹配所有不确定参数
        start_time = datetime.now()         ## 运行函数前的时间
        func(*args, **kwargs)               ## 运行
        end_time = datetime.now()           ## 运行后的时间
        print("运行耗时:{}秒".format((end_time-start_time).seconds))
    return wraper ## 返回处理后的函数
#不调用装饰器
def sleep_time1(n):
    print('好困啊,让我再{}秒钟'.format(n))
    sleep(n)
#调用装饰器
@run_time
def sleep_time2(n):
    print('好困啊,让我睡{}秒钟'.format(n))
    sleep(n)
n = 3
print("不带装饰器的运行结果:")
sleep_time1(n)
print("-"*20)
print("带装饰器的运行结果:")
sleep_time2(n) 
  • 运行结果
不带装饰器的运行结果:
好困啊,让我再3秒钟
--------------------
带装饰器的运行结果:
好困啊,让我睡3秒钟
运行耗时:3秒
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。