1#原先的調用方式2import time
3def index():
4print('welcom to index page')
5 time.sleep(1)
6 start=time.time()
7index()
8 stop=time.time()
9print ('run time is %s' %(stop - start))
輸出:
welcom to index page run time is 1.0005970001220703
1import time
2def index():
3print('welcom to index page')
4 time.sleep(1)
5def wrapper(func):
6 start=time.time()
7 func()
8 stop=time.time()
9print ('run time is %s' %(stop - start))
1011 wrapper(index)
輸出:
welcom to index page run time is 1.000910758972168
1import time
2def index():
3print('welcom to index page')
4 time.sleep(1)
5def outter(func):
6def wrapper():
7 start=time.time()
8 func()
9 stop=time.time()
10print ('run time is %s' %(stop - start))
11return wrapper
12 index=outter(index)
13 index()
輸出: welcom to index page run time is 1.0008034706115723
1#加了裝飾器,目的是不改變原來的調用方式,對使用者是透明的 2import time
3def index():
4print('welcom to index page')
5 time.sleep(1)
6def outter(func):
7def wrapper(*args,**kwargs):
8 start=time.time()
9 res=func(*args,**kwargs)
10 stop=time.time()
11print ('run time is %s' %(stop - start))
12return res
13return wrapper
14 index=outter(index)
15 index() #wrapper() 為實際調用函數,需模擬原先的內部邏輯
輸出:
welcom to index page run time is 1.0013582706451416
1#加了裝飾器,目的是不改變原來的調用方式,對使用者是透明的 2import time
3def index():
4print('welcom to index page')
5 time.sleep(1)
6def home(name):
7print('welcom to home page')
8 time.sleep(2)
9def outter(func):
10def wrapper(*args,**kwargs):
11 start=time.time()
12 res=func(*args,**kwargs)
13 stop=time.time()
14print ('run time is %s' %(stop - start))
15return res
16return wrapper
17 index=outter(index)
18 home=outter(home)
19 index() #wrapper() 為實際調用函數,需模擬原先的內部邏輯20 home('andy') #wrapper('andy')
welcom to index page run time is 1.0008716583251953 welcom to home page run time is 2.0003538131713867
#加了裝飾器,目的是不改變原來的調用方式,對使用者是透明的import timedef timmer(func):def wrapper(*args,**kwargs):start=time.time()res=func(*args,**kwargs)stop=time.time()print ('run time is %s' %(stop - start))return resreturn wrapper
@timmer #index=timer(index)def index():print('welcom to index page')time.sleep(1)
@timmer #home=timer(home)def home(name):print('welcom to home page')time.sleep(2)return 123index() #wrapper() 為實際調用函數,需模擬原先的內部邏輯
res=home('andy') #wrapper('andy')
輸出:
welcom to index page run time is 1.0023157596588135 welcom to home page run time is 2.000333309173584
1#模板2def outter(func):
3def inner(*args,**kwargs):
4 res=func(*args,**kwargs)
5return res
6return res
輸出:
1#認證功能裝飾器實現 2import time
3 4 current_userinfo={'user':None}
5def outter(func): # func為被裝飾對象 6def wrapper(*args,**kwargs):
7if current_userinfo['user']: #判斷是否已登陸 8return func(*args,**kwargs)
9else:
10 user=input('please input username:').strip()
11 pwd=input('please input password:').strip()
12if user == 'andy'and pwd =='123':
13print('login successfully')
14#保存登陸狀態15 current_userinfo['user']=user
16 res=func(*args,**kwargs)
17return res
18else:
19print ('user or password wrong')
20return wrapper
21 @outter #index=outter(index)22def index():
23print('welcom to index page')
24 time.sleep(1)
25 @outter #home=outter(home)26def home(name):
27print('welcom to home page')
28 time.sleep(2)
29return 123
3031 index() #wrapper() 為實際調用函數,需模擬原先的內部邏輯32 res=home('andy') #wrapper('andy')
輸出:
please input username:andy please input password:123 login successfully welcom to index page welcom to home page
?wrapper2 run... wrapper1 run... please input username:andy please input password:123 login successfully welcom to index page run time is 8.713418006896973
wrapper1 run... please input username:andy please input password:123 login successfully wrapper2 run... welcom to index page run time is 1.0009920597076416
輸出: mysql 的認證機制 please input username:andy please input password:123 login successfully welcom to home page
1#加了裝飾器,目的是不改變原來的調用方式,對使用者是透明的 2import time
3from functools import wraps
4 5def timmer(func):
6 @wraps(func)
7def wrapper(*args,**kwargs):
8 start=time.time()
9 res=func(*args,**kwargs)
10 stop=time.time()
11print ('run time is %s' %(stop - start))
12return res
13#wrapper.__doc__=func.__doc__14#wrapper.__name__=func.__name__15return wrapper
16 @timmer #index=timer(index)17def index():
18"""19 這是一個index函數
20 :return
21"""22print('welcom to index page')
23 time.sleep(1)
24return 123
25print(help(index))
26#print(index.__name__)
輸出: Help on function index in module __main__:
index() ??? 這是一個index函數 ??? :return
None
1#三元表達式 2def max2(x,y):
3if x>y:
4return x
5else:
6return y
7 res=max2(1,2)
8 9 res=True if x>y else False
10print (res)
1112#列表生成式13 l=[]
14for i in range(10):
15 l.append(i)
16print(l)
1718 l1=[i for i in range(10)]
19print(l1)
2021#字典生成式22 s={i:i for i in range(10) if i>3}
23print (s)
242526 info=[
27 ['name','alex'],
28 ('age',18)
29 ['sex','male']
30]
31 d={item[0]:item[1] for item in info}
32print(d)
3334 d={k.upper():v for k,v in d.items()}
35print(d)
1#filter過濾2 names=['andy_dsb', 'alex_dsb', 'tom_dsb']
3 res=filter(lambda x:x.endswith('dsb'),names)
4print (res)
5for item in res:
6print(item)
7 l=[name for name in names if name.endswith('dsb')]
8print(l)
輸出:
<filter object at 0x0000023BB55D6A58> andy_dsb alex_dsb tom_dsb ['andy_dsb', 'alex_dsb', 'tom_dsb']