多个装饰器装饰一个函数
生活随笔
收集整理的這篇文章主要介紹了
多个装饰器装饰一个函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# def debug(func):
# # def wrapper():
# # print ("[DEBUG]: enter {}()".format(func.__name__))
# # return func()
# # return wrapper
# # @debug
# # def say_hello():
# # print("hello!")
# say_hello() # 添加功能并保持原函數名不變
#這是最簡單的裝飾器,但是有一個問題,如果被裝飾的函數需要傳入參數,那么這個裝飾器就壞了。因為返回的函數并不能接受參數
#可以指定裝飾器函數wrapper接受和原函數一樣的參數,比如:
# def debug(func):
# def wrapper(something): # 指定一毛一樣的參數
# print("[DEBUG]: enter {}()".format(func.__name__))
# return func(something)
# return wrapper # 返回包裝過函數
#
# @debug
# def say(something):
# print ("hello {}!".format(something))
# say('今天是個好日子')
# def debug(func):
#
# def wrapper(*args, **kwargs): # 指定宇宙無敵參數
# print ("[DEBUG]: enter {}()".format(func.__name__))
# print ('Prepare and say...',)
# return func(*args, **kwargs)
# return wrapper # 返回
#
# @debug
# def say(something):
# print ("hello {}!".format(something))
# say('今天是個好日子')
# class logging(object):
# def __init__(self, user_type=None):
# self.user_type = user_type
#
# def __call__(self, func): # 接受函數
# def wrapper(*args, **kwargs):
# if self.user_type==1:
# print('我是普通用戶')
# elif self.user_type==2:
# print('我是管理員')
# else:
# print('我是普通用戶')
# func(*args, **kwargs)
#
# return wrapper # 返回函數
#
#
# @logging(user_type=1)
# def say(something):
# user_type = 1
# print("say {}!".format(something))
#
# say('今天天氣不錯')
import time#一個裝飾器相當于閉包
def set_func(func):def inner(*args,**kwargs):start_time = time.time()#func(args,kwargs)#不行,相當于傳遞兩個參數,一個元組,一個字典# func(*args,**kwargs)#拆包end_time = time.time()print('裝飾器二號進行裝飾alltime%f' % (end_time - start_time))return '<td>' + str(func(*args,**kwargs)) + '<td>'return inner#一個裝飾器相當于閉包
def set_func_1(func):def inner(*args,**kwargs):start_time = time.time()# #func(args,kwargs)#不行,相當于傳遞兩個參數,一個元組,一個字典# # func(*args,**kwargs)#拆包end_time = time.time()print('裝飾器一號進行裝飾alltime%f' % (end_time - start_time))return '<h1>'+str(func(*args,**kwargs)) +'<h1>'return inner@set_func_1
@set_func
def f1(num):# print("__f1__%d" % num)return "__f1__%d" % numprint(f1(100)) 執行結果:
裝飾器一號進行裝飾alltime0.000001 裝飾器二號進行裝飾alltime0.000000 <h1><td>__f1__100<td><h1>
裝飾器一號進行裝飾alltime0.000001 裝飾器二號進行裝飾alltime0.000000 <h1><td>__f1__100<td><h1>
由此我們可以看出裝飾器的執行先后順序,誰在上面誰先執行。
轉載于:https://www.cnblogs.com/liangliangzz/p/11251260.html
總結
以上是生活随笔為你收集整理的多个装饰器装饰一个函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CH0805 防线 (二分值域,前缀和
- 下一篇: 最大子矩阵求法详解