一、無參裝飾器
1、什麼是裝飾器
器指的是工具,可以定義成成函式,裝飾指的是為其他事物新增額外的東西點綴
合到一起的解釋:
裝飾器指的定義乙個函式,該函式是用來為其他函式新增額外的功能
2、為何要用裝飾器
開放封閉原則
開放:指的是對拓展功能是開放的
封閉:指的是對修改源**是封閉的
裝飾器就是在不修改被裝飾器物件源**以及呼叫方式的前提下為被裝飾物件新增新功能
3、如何用
# def index(x,y):
# time.sleep(3)
# print('index %s %s' %(x,y))
## index(111,222)
# # index(y=111,x=222)
# # index(111,y=222)
# 需求:在不修改index函式的源**以及呼叫方式的前提下為其新增統計執行時間的功能
# 解決方案一:失敗
# 問題:沒有修改被裝飾物件的呼叫方式,但是修改了其源**
# import time
## def index(x,y):
# start=time.time()
# time.sleep(3)
# print('index %s %s' %(x,y))
# stop = time.time()
# print(stop - start)
## index(111,222)
# 解決方案二:失敗
# 問題:沒有修改被裝飾物件的呼叫方式,也沒有修改了其源**,並且加上了新功能
# 但是**冗餘
# import time
## def index(x,y):
# time.sleep(3)
# print('index %s %s' %(x,y))
## start=time.time()
# index(111,222)
# stop=time.time()
# print(stop - start)##
## start=time.time()
# index(111,222)
# stop=time.time()
# print(stop - start)##
# start=time.time()
# index(111,222)
# stop=time.time()
# print(stop - start)
# 解決方案三:失敗
# 問題:解決了方案二**冗餘問題,但帶來乙個新問題即函式的呼叫方式改變了
# import time
## def index(x,y):
# time.sleep(3)
# print('index %s %s' %(x,y))
## start=time.time()
# index(111,222)
# stop=time.time()
# print(stop - start)
#
# 方案三的優化一:將index的引數寫活了
# import time
## def index(x,y,z):
# time.sleep(3)
# print('index %s %s %s' %(x,y,z))
## start=time.time()
# index(*args,**kwargs) # index(3333,z=5555,y=44444)
# stop=time.time()
# print(stop - start)
#
# 方案三的優化二:在優化一的基礎上把被裝飾物件寫活了,原來只能裝飾index
# import time## def index(x,y,z):
# time.sleep(3)
# print('index %s %s %s' %(x,y,z))
## def home(name):
# time.sleep(2)
# print('welcome %s to home page' %name)##
# def outter(func):
# # func = index的記憶體位址
# start=time.time()
# func(*args,**kwargs) # index的記憶體位址()
# stop=time.time()
# print(stop - start)##
## home('egon')
# # home(name='egon')
# import time
## def index(x,y,z):
# time.sleep(3)
# print('index %s %s %s' %(x,y,z))
## def home(name):
# time.sleep(2)
# print('welcome %s to home page' %name)
## def outter(func):
# start=time.time()
# res=func(*args,**kwargs)
# stop=time.time()
# print(stop - start)
# return res##
## home=outter(home)##
# print('返回值--》',res)
# 大方向:如何在方案三的基礎上不改變函式的呼叫方式
# 語法糖:讓你開心的語法
# # 在被裝飾物件正上方的單獨一行寫@裝飾器名字
# # @timmer # index=timmer(index)
# def index(x,y,z):
# time.sleep(3)
# print('index %s %s %s' %(x,y,z))
# 總結無參裝飾器模板
# def outter(func):# # 1、呼叫原函式
# # 2、為其增加新功能
# res=func(*args,**kwargs)
# return res
Python學習筆記day17 無參裝飾器
與 都可以用在形參中,用在形參中他們是彙總的意思。是把多餘的位置實參給彙總成元組的形式,賦值給args 與 在是實參中,打散 彙總與打散互為逆過程 舉例說明 def index args,a 1,b 1 print args,a,b index args,kwargs 將args打散 index 1...
無參裝飾器
def index x,y print x,y index args,kwargs index y 222,x 111 可以把函式當做引數傳入 可以把函式當做返回值返回 def index return 123 def foo func return func foo index def outte...
實習日記 Day17
今日份 更新 今日份流水賬 需求更新 身為乙方,每當甲方需求更新的時候,應該都很煩吧。但是我發現我自己,也許是性格使然吧,居然覺得能盡可能去滿足客戶的需求,也是一件很有成就感的事。反倒是讓我提需求的話,我會產生一種給別人添麻煩的不適感 不過這也可能是我今日份的感想,換個日子興許就不這樣想了。工具更新...