python 裝飾器相關 從後往前看
阿新 • • 發佈:2018-12-15
import time def timmer(func): #func=test def wrapper(): start_time=time.time() res=func() #就是在執行test() stop_time = time.time() print('執行時間是%s' %(stop_time-start_time)) return res return wrapper @timmer #test=timmer(test) def test(): time.sleep(3) print('test函式執行完畢') return '這是test的返回值' res=test() #就是在執行wrapper print(res)
import time def timmer(func): #func=test1 def wrapper(*args,**kwargs): #test('linhaifeng',age=18) args=('linhaifeng') kwargs={'age':18} start_time=time.time() res=func(*args,**kwargs) #就是在執行test() func(*('linhaifeng'),**{'age':18}) stop_time = time.time() print('執行時間是%s' %(stop_time-start_time)) return res return wrapper # @timmer #test=timmer(test) def test(name,age): time.sleep(3) print('test函式執行完畢,名字是【%s】 年齡是【%s】' %(name,age)) return '這是test的返回值' @timmer def test1(name,age,gender): time.sleep(1) print('test1函式執行完畢,名字是【%s】 年齡是【%s】 性別【%s】' %(name,age,gender)) return '這是test的返回值' # res=test('linhaifeng',age=18) #就是在執行wrapper # # print(res) # test1('alex',18,'male') test1('alex',18,'male') # def test2(name,age,gender): #test2(*('alex',18,'male','x','y'),**{}) # #name,age,gender=('alex',18,'male','x','y') # print(name) # print(age) # print(gender) # # def test1(*args,**kwargs): # test2(*args,**kwargs) #args=('alex',18,'male','x','y') kwargs={} # # # test2('alex',18,gender='male') # # test1('alex',18,'male')
user_list=[ {'name':'alex','passwd':'123'}, {'name':'linhaifeng','passwd':'123'}, {'name':'wupeiqi','passwd':'123'}, {'name':'yuanhao','passwd':'123'}, ] current_dic={'username':None,'login':False} def auth(auth_type='filedb'): def auth_func(func): def wrapper(*args,**kwargs): print('認證型別是',auth_type) if auth_type == 'filedb': if current_dic['username'] and current_dic['login']: res = func(*args, **kwargs) return res username=input('使用者名稱:').strip() passwd=input('密碼:').strip() for user_dic in user_list: if username == user_dic['name'] and passwd == user_dic['passwd']: current_dic['username']=username current_dic['login']=True res = func(*args, **kwargs) return res else: print('使用者名稱或者密碼錯誤') elif auth_type == 'ldap': print('鬼才特麼會玩') res = func(*args, **kwargs) return res else: print('鬼才知道你用的什麼認證方式') res = func(*args, **kwargs) return res return wrapper return auth_func @auth(auth_type='filedb') #auth_func=auth(auth_type='filedb')-->@auth_func 附加了一個auth_type --->index=auth_func(index) def index(): print('歡迎來到京東主頁') @auth(auth_type='ldap') def home(name): print('歡迎回家%s' %name) # @auth(auth_type='sssssss') def shopping_car(name): print('%s的購物車裡有[%s,%s,%s]' %(name,'奶茶','妹妹','娃娃')) # print('before-->',current_dic) # index() # print('after--->',current_dic) # home('產品經理') shopping_car('產品經理')
裝飾器預演
import time
def timmer(func):
def wrapper(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
stop_time = time.time()
print('函式執行時間是%s' %(stop_time-start_time))
return res
return wrapper
@timmer
def cal(l):
res=0
for i in l:
time.sleep(0.1)
res+=i
return res
res=cal(range(20))
print(res)
裝飾器
import time
def cal(l):
start_time=time.time()
res=0
for i in l:
time.sleep(0.1)
res+=i
stop_time = time.time()
print('函式的執行時間是%s' %(stop_time-start_time))
return res
print(cal(range(100)))
def index():
pass
def home():
pass
裝飾器實現
import time
def timmer(func): #func=test
def wrapper():
# print(func)
start_time=time.time()
func() #就是在執行test()
stop_time = time.time()
print('執行時間是%s' %(stop_time-start_time))
return wrapper
@timmer #test=timmer(test)
def test():
time.sleep(3)
print('test函式執行完畢')
test()
# res=timmer(test) #返回的是wrapper的地址
# res() #執行的是wrapper()
# test=timmer(test) #返回的是wrapper的地址
# test() #執行的是wrapper()
# @timmer 就相當於 test=timmer(test)
生成器相關的yield
# age=10
# res=True if age > 10 else False
#
# l=['a' for i in range(10)]
# g_l=('a' for i in range(10))
def test():
for i in range(4):
yield i
t=test()
# for i in t:
# print(i)
#
# t1=(i for i in t)
# print(list(t1))
# t1=(i for i in t)
# t2=(i for i in t1) #這裡為空 因為生成器一次就完蛋了 他並會儲存裡面的值
# print(list(t1))
# print(list(t2))