python (个人学习笔记1.0系列番外)-- 一个简单的,记录某函数块运行时间的“装饰器”的编写

一、装饰器的功能

一、装饰器可以在不改动函数原代码和代码执行方式的同时,为某个函数添加新的功能,可以使得代码更简洁。
同时,不改变源代码的特性,可以避免在更改源代码时,可能发生的牵一发而动全身的错误发生,导致原本运行正常的程序发生难以矫正的错误。
二、不改变代码的执行方式,例如:
在公司中,某函数的调用方式本为foo(),
当为它加入新功能时,因为不使用装饰器,使得要使用新功能需要执行额外的代码,例如可能的:stat_time(foo)。而因为公司不止你一人使用该新功能,但是其他人都习惯了原本foo()这样简单明了的函数调用方法,此时为了使得原调用方法同样能实现该新功能,就可以使用装饰器。

二、一个简单的统计某函数执行时间的装饰器代码实现

例如:

import time

def stat_time(function):	#时间统计函数
    def inner(*args,**kwargs):
        start_time = time.time()
        function(*args,**kwargs)
        finish_time = time.time()
        print("op_time :%f\n"%(finish_time-start_time))
    return inner
#该装饰器的重点在于高阶函数的运用

def ccs():				
    print('ccs......')
    time.sleep(2)		#代码运行时间过短,增加暂停方便记录运行时间
ccs = stat_time(ccs)
ccs()

@stat_time  #等价于prent = stat_time(prent)
def prent():
    print('present......')
    time.sleep(2)
prent()

@stat_time
def add(*args,**kwargs):	#求和
    num = 0
    for i in args:
        num+=i
    print(num)
    time.sleep(2)
add(3,4,4,5)

输出:

ccs......
op_time :2.000534

present......
op_time :2.000541

16
op_time :2.000664

二、装饰器内加装新功能(日志记录):

import time

def show_time(floger=''):
    def stat_time(function):	#时间统计函数
        def inner(*args,**kwargs):
            start_time = time.time()
            function(*args,**kwargs)
            finish_time = time.time()
            print("op_time :%f"%(finish_time-start_time))
            if floger=='true':
                print('日志记录\n')
        return inner
    return  stat_time
#该装饰器的重点在于高阶函数的运用
@show_time()
def ccs():
    print('ccs......')
    time.sleep(2)		
ccs()

@show_time('true')  
def prent():
    print('present......')
    time.sleep(2)
prent()

@show_time('true')
def add(*args,**kwargs):
    num = 0
    for i in args:
        num+=i
    print(num)
    time.sleep(2)
add(3,4,4,5)

输出:

ccs......
op_time :2.000159
present......
op_time :2.000657
日志记录

16
op_time :2.000106
日志记录
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值