码迷,mamicode.com
首页 > 其他好文 > 详细

010_装饰器

时间:2019-03-09 16:37:25      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:family   图片   image   return   运行时间   size   执行   port   时间   

1,时间
import time
print(time.time())      #获取当前时间
time.sleep(10)          #让程序在执行到这个位置的时候停一会儿
  1.1,计算程序运行时间
import time
def func():
    start = time.time()
    print(‘计算时间‘)
    time.sleep(0.01)
    end = time.time()
    print(end-start)
func()
  1.2,计算程序运行时间优化
import time
def timmer(f):
    start = time.time()
    f()
    end = time.time()
    print(end - start)

def func():
    time.sleep(0.01)
    print(‘计算时间‘)

timmer(func)
2,不想修改函数的调用方式,但还想在原来的函数前后添加功能
    timmer()就是一个装饰器函数,只是对一个函数,有一些装饰作用
import time
def func():         #被装饰函数
    time.sleep(0.01)
    print(‘计算时间‘)

def timmer(f):      #装饰器函数
    def inner():
        start = time.time()
        f()      #被装饰函数
        end = time.time()
        print(end - start)
    return inner

func = timmer(func)
func()
3,@装饰符的使用
import time

def timmer(f):      #装饰器函数
    def inner():
        start = time.time()
        f()      #被装饰函数
        end = time.time()
        print(end - start)
    return inner

@timmer     #这个相当于func = timmer(func)这个语句
def func():         #被装饰函数
    time.sleep(0.01)
    print(‘计算时间‘)

#func = timmer(func)
func()
  装饰器函数是一个闭包,因为参数f是函数timmer的变量,所以inner函数是调用的了外部函数的变量,
  因为f是外部函数的变量,根据闭包特性,f得到传参后就会一直是代表传来的参数

4,装饰器的执行

技术图片


5,装饰带参数函数的装饰器
import time

def timmer(f):      #装饰器函数
    def inner(a):
        start = time.time()
        ret = f(a)      #被装饰函数
        end = time.time()
        print(end - start)
        return ret
    return inner

@timmer
def func(a):         #被装饰函数
    time.sleep(0.01)
    print(‘计算时间‘)
    return ‘返回值‘

#func = timmer(func)
ret = func(1)
print(ret)

技术图片

010_装饰器

标签:family   图片   image   return   运行时间   size   执行   port   时间   

原文地址:https://www.cnblogs.com/eternity-twinkle/p/10501736.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!