装饰器的应用-装饰器带参数和不带参数
1 #!/usr/bin/env python 2 #encoding: utf-8 3 def start_info(): 4 print ('电视剧开头曲.......') 5 print ('开始唱歌.......') 6 def end_info(): 7 print ('电视剧结束曲.......') 8 9 def filter(start_info,end_info): #接收俩函数 10 def outer(main_fun): #接收装饰的函数 11 def app(*argv,**kwargs): #接收装饰的函数的参数 12 print('******************************') 13 start_info() 14 main_fun(*argv,**kwargs)#接收装饰的函数的参数 15 end_info() 16 print('******************************') 17 return app 18 return outer 19 #先把函数传进去,然后在用里面的函数装饰 20 #传函数的装饰器必须有三个def ,第一个是接受函数,第二个是装饰函数的,返回第三个函数对象 21 # 把需要装饰的函数重新定义,然后调用调用 22 #1: filter(start_info,end_info): 23 #2: @outer -> one_info = outer(one_info) 24 @filter(start_info,end_info) #这里传入俩个函数 25 def one_info(name,info): 26 print ('this is one') 27 print('wolcome to tv %s .......' % (name)) 28 print('wolcome to tv %s .......' % (info)) 29 30 @filter(start_info,end_info) 31 def two_info(name,info): 32 print('this is two') 33 print('wolcome to tv %s .......' % (name)) 34 print('wolcome to tv %s .......' % (info)) 35 36 @filter(start_info,end_info) 37 def three_info(name,info): 38 print('this is three') 39 print('wolcome to tv %s .......' % (name)) 40 print('wolcome to tv %s .......' % (info)) 41 42 if __name__ == "__main__": 43 print('三国演义三部曲开始。。。。。。。。') 44 print('第一部。。。。。。。。。。。。。。') 45 one_info('三国电视剧第一部', '三国大战') 46 47 print('第二部。。。。。。。。。。。。。。') 48 two_info('三国电视剧第二部', '三国英雄') 49 50 print('第三部。。。。。。。。。。。。。。') 51 three_info('三国电视剧第三部', '三国鼎力')
1 #!/usr/bin/env python 2 #encoding: utf-8 3 def start_info(): 4 print ('电视剧开头曲.......') 5 print ('开始唱歌.......') 6 def end_info(): 7 print ('电视剧结束曲.......') 8 9 def outer(main_fun): #接收装饰的函数 10 def app(*argv,**kwargs): #接收装饰的函数的参数 11 print('******************************') 12 start_info() 13 main_fun(*argv,**kwargs)#接收装饰的函数的参数 14 end_info() 15 print('******************************') 16 return app 17 18 #1: @outer -> one_info = outer(one_info) 19 @outer 20 def one_info(name,info): 21 print ('this is one') 22 print('wolcome to tv %s .......' % (name)) 23 print('wolcome to tv %s .......' % (info)) 24 25 @outer 26 def two_info(name,info): 27 print('this is two') 28 print('wolcome to tv %s .......' % (name)) 29 print('wolcome to tv %s .......' % (info)) 30 31 @outer 32 def three_info(name,info): 33 print('this is three') 34 print('wolcome to tv %s .......' % (name)) 35 print('wolcome to tv %s .......' % (info)) 36 37 if __name__ == "__main__": 38 print ('三国演义三部曲开始。。。。。。。。') 39 print ('第一部。。。。。。。。。。。。。。') 40 one_info('三国电视剧第一部','三国大战') 41 42 print('第二部。。。。。。。。。。。。。。') 43 two_info('三国电视剧第二部','三国英雄') 44 45 print('第三部。。。。。。。。。。。。。。') 46 three_info('三国电视剧第三部','三国鼎力')