Python学习日记(九) 装饰器

python学习网 2019-08-11 18:31:07

1.import time

  a.time.time()

  获取到当前的时间,返回值为浮点型

import time
print(time.time())  #1565422783.6497557

  b.time.sleep()

  让程序执行到这个位置暂停一会

import time
start = time.time()
time.sleep(0.5)
print('hello world!')
end = time.time()
print(end - start)  #0.5000286102294922

 

2.装饰器

开发原则:开放封闭原则

装饰器的作用:在不改变原函数的情况下,在函数的前后添加功能

装饰器的本质:闭包函数

 

当想要知道一个程序执行的时间

import time
start = time.time()
time.sleep(0.5)
print('hello world!')
end = time.time()
print(end - start)  #0.5000286102294922

再将里面的功能单独拉出来变成一个函数

import time
def func():
    time.sleep(0.5)
    print('hello world!')
def timer(func):
    start = time.time()
    func()
    end = time.time()
    print(end - start)
timer(func)     #hello world!
                #0.5000286102294922

将timer变成一个简单的装饰器

import time
def func():                 #被装饰的函数
    time.sleep(0.5)
    print('hello world!')
def timer(func):            #装饰函数
    def inner():
        start = time.time()
        func()
        end = time.time()
        print(end - start)
    return inner            #回传inner函数的内存地址
get_inner = timer(func)     #后者得到的是inner的内存地址再赋值给get_inner
get_inner()                 #hello world!
                            #0.5000286102294922

执行步骤:

开放封闭原则:开放指的是对扩展开放,封闭指的是对修改封闭

语法糖:@装饰器函数名  可以替代下面的写法

装饰带一般参数且有返回值函数的装饰器

import time
def wrapper(f):     #装饰器函数
    def inner(x):
        res = f(x)
        return res
    return inner
@wrapper            #相当于 fuc = wrapper(fuc)
def fuc(var):       #被装饰的函数
    print(var,'Python')
    return False
res = fuc('Hello')
print(res)

装饰带万能参数的函数装饰器

import time
def wrapper(f):             #装饰器函数
    def inner(*args,**kwargs):
        start = time.time()
        ret = f(*args,**kwargs)
        end = time.time()
        print(end - start)
        return ret
    return inner
@wrapper        #相当于 fuc = wrapper(fuc)
def fuc(a,b,c,d,e = 5):     #被装饰的函数
    time.sleep(0.5)
    print(a,b,c,d,e)
    return e
print(fuc(1,2,3,4,'Python'))

总结:装饰器的模板

import time
def wrapper(f):
    def inner(*args,**kwargs):
        #在被装饰函数之前要做的事
        res = f(*args,**kwargs)
        #在被装饰函数之后要做的事
        return res
    return inner
@wrapper
# func = wrapper(func)
def func():            #被装饰的函数
    return
ret = func()
print(ret)

 

阅读(3603) 评论(0)