def sort(iterable): lst = [] for i in iterable: for j,m in enumerate(lst): if i > m: lst.insert(j,i) break else: lst.append(i) return lst lst1=[9,5,4,7,6,5,1] print(sort(lst1))
def sort(iterable,reverse=Flase): #(reverse默認爲假,非False即爲真) lst=[] for i in iterable: for j,m in enumerate lst: flag=i>m if reverse else i<m #(客戶可在函數後增長 參數進行判斷升降序) if flag: lst.insert(j,i) break else: lst.append(i) return lst lst1=[8,7,6,2,1,4,9] print(sort(lst1,reverse的參數))
def sort(iterable,key=lambda a,b:a<b): #定義升降序的默認值 lst = [] for i in iterable: for j, m in enumerate(lst): flag=key(i,m) #返回布爾值(True,False) if flag: lst.insert(j, i) break else: lst.append(i) return lst lst1 = [8, 7, 6, 2, 1, 4, 9] print(sort(lst1,lambda a,b:a>b))
def nums(x): def nums1(y): nonlocal x x+=y return x return nums1 foo = nums(5) foo(6)
例如一個函數爲: def sum(x,y): value=x+y return value 這個代碼只執行一個計算的程序,我稱之其爲業務代碼,若是我想在其上下添加‘語句塊’可是又不想入侵這個業務代碼,就須要利用到裝飾器了 def coat(key): def pants(x,y): print('wow,you look so great') fn=key(x,y) print('i love it') return fn return pants @coat #sum=coat(sum) def sum(x,y): value=x+y return value 這就是一個簡單的裝飾器,在不入侵業務代碼的同時,也能夠對其進行加強,當讓遠不止打印幾句話這種簡單用法,能夠添加 時間,計數等等
def add(x,y): return x+y def logger(fn): print('begin') x= fn(4,5) print('end') return x print(logger(add)) 使用裝飾器解決: def logger(fn): def _logger(*args) print('begin') x= fn(*args) print('end') return x @logger #add=logger(add) def add(x,y): return x+y add(4,5) 輸出結果爲 begin end 9 這段代碼在不入侵業務代碼的同時,也加入了想要的內容,這種方法就叫作裝飾器
import datetime import time def looger(fn): def warp(*args,**kwargs): # 加強功能 print('args={},kwargs={}'.format(args,kwargs)) #聲明傳進來的是什麼東西 start = datetime.datetime.now() ret = fn(*args,**kwargs) end = datetime.datetime.now() - start print('founc{} took {}s.'.format(warp.__name__,end.total_seconds())) #打印函數執行時長 return ret return warp def add(x,y): print('===call add=========') time.sleep(2) return x + y print(add(5,6))
import datetime import time def logger(new): def warp(*args,**kwargs): print('args={} kwargs={}.'.format(args,kwargs)) start=datetime.datetime.now() ret = new(*args,**kwargs) times=datetime.datetime.now() - start print('func {} need {}s.'.format(warp.__name__,times)) return ret return warp @logger def combo(x,y=10): time.sleep(2) return (x+10)*3-1 print(combo(40,y=97))
def add(x,y): '''this is function thx''' ret=x+y return ret print(add.__doc__)
def copy_(src): def wapper(dct): src.__name__ =dct.__name__ src.__doc__ =dct.__name__ return dct return wapper import datetime import time def logger(fn): @copy_(fn) #原公式爲 @copy_.waper=>logger.warp=copy_.wapper(logger.warp) def warp(*args,**kwargs): ''' this is function ''' print('args={} kwargs={}.'.format(args,kwargs)) start=datetime.datetime.now() ret = fn(*args,**kwargs) times=datetime.datetime.now() - start print('func {} need {}s.'.format(warp.__name__,times)) return ret return warp @logger def combo(x,y=10): time.sleep(2) return (x+10)*3-1 print(combo(40,y=97)) def add(x,y): '''this is function x = int y = int thx''' ret=x + y return ret print(add.__doc__)
def coop(old): def cood(new): new.__name__=old.__name__ new.__doc__=old.__doc__ return new return cood import datetime import time def word(t): def dayss(fn): def wordadd(*args): '''this is wodradd wordadd ''' start=datetime.datetime.now() print('im a super student') tec=fn(*args) end=(datetime.datetime.now() - start).total_seconds() if end > t: print('you program is so slow , you can write it again ') else: print('you need {}s to make this complete'.format(end)) return tec return wordadd return dayss @word(t=50) def add(x,y): '''this is add help words''' time.sleep(2) return x + y print('''Function:{}; Helpword={}; The result of his executionis {}'''.format({add.__name__},{add.__doc__},{add(4,5)}))
import datetime,time,functools: def logger(durtion,func=lambda name,duration:print('{} took {}s'.format(name,duration))): def __logger(fn): @functools(fn) def wrapped(*args): start = datetime.datetime.now() ret = fn(*args) delta = (datetime.datetime.now()-start).total.seconds() if delta > duration: func(__name__,duration) return ret return wrapped return __logger @logger(5) # add = logger(5(add) def add(x,y): time.sleep(2) return x+y print(add(5,6),add.__name__,add.__dict__,add.wrapped__,sep='\n')
溫故而知新,知識仍是要鞏固的呀python