Python 装饰器

当有多个函数需要拥有相同功能时,装饰器就起到很大作用,在不改变原有函数代码时,用装饰器给函数增加一个小功能很是方便。
譬如我现在有几个函数,我想知道它们的执行时间,那么我可以写一个装饰器来实现。

def count_time(func):
    def int_time(*args,**kwargs):
        start_time = datetime.datetime.now() #程序开始时间
        func(*args,**kwargs)
        over_time = datetime.datetime.now()  #程序结束时间
        total_time = (over_time-start_time).total_seconds()
        print('%s executed in %s seconds' %(func.__name__,total_time))
    return int_time

这里使用args和kwargs允许我们在函数中传递多个参数
我希望计算几个数的加减乘除,定义不同的函数

def func1(x,y):
    time.sleep(2.5)
    return x + y

def func2(x,y,z):
    time.sleep(2.5)
    return x*y*z

用@符号调用装饰器
下面给出完整代码

import datetime,functools,time

def count_time(func):
    def int_time(*args,**kwargs):
        start_time = datetime.datetime.now() #程序开始时间
        func(*args,**kwargs)
        over_time = datetime.datetime.now()  #程序结束时间
        total_time = (over_time-start_time).total_seconds()
        print('%s executed in %s seconds' %(func.__name__,total_time))
    return int_time

@count_time
def func1(x,y):
    time.sleep(2.5)
    return x + y

@count_time
def func2(x,y,z):
    time.sleep(2.5)
    return x*y*z

func1(2,5)
func2(4,6,3)

运行结果


使用这个装饰器相当于
func=count_time(func),int_time作为返回值赋值给func

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 装饰器函数 楔子 作为一个会写函数的python开发,我们从今天开始要去公司上班了。写了一个函数,就交给其他开发用...
    go以恒阅读 286评论 0 0
  • Python装饰器的高级用法(翻译) 原文地址https://www.codementor.io/python/t...
    城南道阅读 4,827评论 1 22
  • 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,...
    chen_000阅读 1,372评论 0 3
  • 一、理论 1、装饰器定义 本质上是函数(装饰其他函数),就是为其他函数添加附加功能。 2、原则 1、不能修改被装饰...
    SlashMan阅读 366评论 0 0
  • 平安夜收到很多会员宝宝的祝福,还有朋友的关心[玫瑰]今天一个会员阿姨见到我就给了我一个大抱抱 说看到我就喜欢我我相...
    心念斋阅读 113评论 0 0