python装饰器的简单使用

182 阅读1分钟

python基础学习网站

python精选博客

python中闭包,闭包的实质

  • 装饰器是拓展原先函数的一种函数
from django.test import TestCase

# Create your tests here.
import time
  • 简单的装饰器
# def deco(func):
#     def wrapper():
#         startTime = time.time()
#         func()
#         endTime = time.time()
#         msecs = (endTime - startTime)*1000
#         print('time is %d ms' %msecs)
#     return wrapper
# @deco
# def func():
#     print('hello')
#     time.sleep(2)
#     print('world')
  • 带有参数的装饰器
# def deco(func):
#     def wapper(a,b):
#         startTime = time.time()
#         func(a,b)
#         endTime = time.time()
#         msecs = (endTime-startTime)*1000
#         print('用时----- %d ms' %msecs)
#     return wapper
#
# @deco
# def func(a,b):
#     print('需要执行的函数 :')
#     time.sleep(1)
#     print('执行结果 %d' %(a*b))
  • 多个装饰器

def deco1(func):
    def wapper(*args,**kwargs):
        print('第一个装饰器')
        startTime  = time.time()
        func(*args,**kwargs)
        endTime = time.time()
        allTime = (endTime-startTime)*1000
        print('总共用时',allTime)

    return wapper


def deco2(func):
    def wapper(*args, **kwargs):
        print('第二个装饰器')
        startTime = time.time()
        func(*args, **kwargs)
        endTime = time.time()
        allTime = (endTime - startTime) * 1000
        print('总共用时', allTime)

    return wapper

@deco1
@deco2
def func(a,b):
    print('函数执行')
    time.sleep(3)
    print('结果是 %d'%(a*b))
    
  • 带返回值的装饰器
def deco1(func):
    def wapper(*args,**kwargs):
        print('装饰器')
        start_Time = time.time()
        str1 = func(*args,**kwargs)
        end_Time = time.time()
        all_time = (end_Time-start_Time)*1000
        print('总共用时',all_time)
        return str1
    return wapper
@deco1
def func(a,b):
    print('aaaaaaaaaaaaa')
    time.sleep(2)
    print('bbbbbbbbbbb')
    return a+b
    
if __name__ == '__main__':
    func(1,10)