定義:在不改變原有函式的情況下,增加額外的功能。其返回值也是乙個python函式。
裝飾函式,用於在已經定義好的某乙個函式(或**段)使用時,輸入或者操作自己想要的資料。
#乙個已有的**:
defhello
(): print(' word!')
函式物件中,可以拿到函式名字的乙個屬性是:__name__
注意這裡是前後兩個下劃線:._ _name_ _
(我將中間放乙個空格為了方便看清楚,實際使用時不用中間的空格)
> > > hello.__name__
> > > 'hello'
> > > f=hello
> > > f()
> > > word!
使用裝飾函式,在呼叫hello函式時,進行一些操作。
1.裝飾器無引數,函式無引數
裝飾函式中要把需要被裝飾的函式當做引數傳進去
def
decorator
(func):
print('%s '%func.__name__,end='')
#返回被裝飾的函式
return func
裝飾函式來裝飾hello函式
@decorator
defhello
(): print(' word!')
列印被裝飾好的函式
hello()
輸出: hello word!
相當於將這個函式變成:decorator(hello)
2.裝飾器無引數,函式有引數
def
decorator
(func):
print('%s'%func.__name__,end='')
return func
@decorator
defhello
(string):
print(string,'❤')
hello(' python ')
輸出:
yeah!
hello python ❤
3.裝飾器引數,函式有引數def
decorator
(*string):
deffunc
(func):
print('%s'%string)
print('%s'%func.__name__,end='')
return func
return func
@decorator('yeah!')
defhello
(string):
print(string,'❤')
hello(' python ')
輸出:
yeah!
hello python ❤
4.通用def
decorator
(*string):
if len(string)>1:
deffunc1
(func):
print(string)
print('%s'%func.__name__,end='')
return func
return func1
else:
deffunc2
(func):
print('no string')
print('%s'%func.__name__,end='')
return func
return func2
* python -帶最小值操作的棧
題目:實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。
你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o(1)時間內完成。
** 注意事項
如果堆疊中沒有數字則不能進行min方法的呼叫
樣例 如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回1,2,1
解法
使用乙個列表假代棧,push操作使用列表的插入函式:list.insert(index, obj),引數index代表插入的位置,引數obj代表需要插入的引數。pop操作使用列表的刪除函式:del list[index]引數index代表需要刪除的位置,刪除之前記錄列表的第乙個元素然後返回。min操作使用列表的最小值函式:min(list)引數list代表列表。使用裝飾器來判斷棧的大小,如果棧長度>0,則繼續操作,如果小於0,則返回false,其中@wraps作用為:把原函式的元資訊拷貝到裝飾器函式中,使得裝飾器函式和原函式有一樣的元資訊,如此可以使得棧長度>0時,正確返回應該執行的函式。
**:
# # -*- coding: utf-8 -*-
from functools import wraps
defmin0
(origin_func):
@wraps(origin_func) #把原函式的元資訊拷貝到裝飾器函式中,使得裝飾器函式和原函式有一樣的元資訊
def(self,*args,**kwargs):
if len(self.zhan):
return origin_func(self,*args,**kwargs)
else:
return
false
class
minstack:
def__init__
(self):
# do intialization if necessary
self.zhan=
"""@param: number: an integer
@return: nothing
"""defpush
(self, number):
# write your code here
self.zhan.insert(0,number)
"""@return: an integer
"""defpop
(self):
# write your code here
no0 = self.zhan[0]
del self.zhan[0]
return no0
"""@return: an integer
"""@min0
defmin
(self):
# write your code here
print('min:self.zhan', self.zhan)
return min(self.zhan)
Python 使用裝飾器「 」取得函式執行時間
class a python 使用裝飾器 取得函式執行時間 oldj的學習筆記 部落格頻道 csdn.net python中可以使用裝飾器對函式進行裝飾 或說包裝 利用這個特性,可以很方便 簡潔地解決一些問題,比如獲得函式執行時間的問題。首先,我們定義乙個函式,如下 python view plai...
Python 裝飾器計算函式或方法執行時間
def execute time func from time import time 定義巢狀函式,用來列印出裝飾的函式的執行時間 定義開始時間 start time 執行函式 func return func args,kwargs 定義結束時間 end time 列印方法名稱和其執行時間 pr...
python檢測函式執行時間用 巧用裝飾器
眾所周知,python中的time模組可以獲取時間戳,然後得到程式片執行所消耗的時間。但靠時間戳相減得到執行時間對於大規模程式是比較卑微的,你得命名很多個變數名去記錄時間戳。這個時候,可以利用裝飾器來記錄時間。本文介紹兩種方法,進行對比。常規版 from time import time def r...