python入门第十五天__装饰器参数
二层装饰器:
1 import time 2 3 def outer(f): 4 def inner(*args,**kwargs): 5 f(*args,**kwargs) 6 7 return inner 8 9 10 def fn(*args,**kwargs): 11 sum_s=0 12 for i in args: 13 sum_s+=i 14 print(sum_s) 15 time.sleep(1) 16 17 print(outer(fn)) 18 19 fn=outer(fn) 20 print(fn) 21 fn(90,9,1)
结果:
<function outer.<locals>.inner at 0x0000000002891378> <function outer.<locals>.inner at 0x0000000002891378> 100
三层装饰器:
1 def outer(f): 2 def warper(): 3 def inner(*args,**kwargs): 4 f(*args,**kwargs) 5 return f 6 return inner 7 return warper 8 9 10 def fn(*args,**kwargs): 11 sum_s=0 12 for i in args: 13 sum_s+=i 14 print(sum_s) 15 time.sleep(1) 16 17 print(outer(fn)()) 18 19 fn=outer(fn)() 20 print(fn) 21 fn(90,9)
结果:
<function outer.<locals>.warper.<locals>.inner at 0x0000000002851400> <function outer.<locals>.warper.<locals>.inner at 0x0000000002851378> 99
装饰器参数
计算程序运行时间
import time # def logger(flag): def outer(f): def inner(*args,**kwargs): start=time.time() f(*args,**kwargs) end=time.time() print('程序名%s,时间花费%s'%(f.__name__,end-start)) return inner # return outer def fn(*args,**kwargs): sum_s=0 for i in args: sum_s+=i print(sum_s) time.sleep(1) # print(outer(fn)) # fn=outer(fn) print(fn) fn(90,9,1)
结果:
<function outer.<locals>.inner at 0x0000000002841378>
100
程序名fn,时间花费1.0
import time # def logger(flag): def outer(f): def inner(*args,**kwargs): start=time.time() f(*args,**kwargs) end=time.time() print('程序名%s,时间花费%s'%(f.__name__,end-start)) return inner # return outer @outer #fn=outer(fn) def fn(*args,**kwargs): sum_s=0 for i in args: sum_s+=i print(sum_s) time.sleep(1) # print(outer(fn)) # #fn=outer(fn) # print(fn) fn(90,9,1)
用装饰器参数控制装饰器是否起作用:
import time def logger(flag=''): def outer(f): def inner(*args,**kwargs): start=time.time() f(*args,**kwargs) end=time.time() print('程序名%s,时间花费%s'%(f.__name__,end-start)) if flag=='true': print('日志记录') return inner return outer # @outer #fn=outer(fn) @logger('true') #因为有返回,@outer def fn(*args,**kwargs): sum_s=0 for i in args: sum_s+=i print(sum_s) time.sleep(1) # print(outer(fn)) # #fn=outer(fn) # print(fn) fn(90,9,1)
结果:
100
程序名fn,时间花费1.0
日志记录
装饰器之登陆界面设计:
1 #-*- coding:utf-8 -*- 2 ''' 3 编写一个装饰器,实现网站浏览,点击命令的时候,判断是否登录账号,如果没有登录,进入登录界面,如果登录,则保持不动,继续执行用户操作 4 ''' 5 import time 6 7 #数据库中存储的口令 8 # user='Tom' 9 # passwd='123' 10 kouling={'user':'Tom','passwd':'123'} #登录口令 11 12 flage_status=False 13 14 def login(zhanghao=''): 15 def outer(fn): 16 def inner(): 17 global flage_status 18 if flage_status is not True: 19 if zhanghao == 'jingdong' or zhanghao=='': 20 username=input('please input your name>>>') 21 password=input('please input your password>>>') 22 23 if username==kouling['user'] and password==kouling['passwd']: 24 fn() 25 print('pass login') 26 print('pass jingdong') 27 flage_status=True 28 elif zhanghao == 'weixin': 29 print('调用微信登录接口') 30 fn() 31 flage_status=True 32 else: 33 print('代码有误,请检查装饰器的参数') 34 elif flage_status == True: 35 print('pass already') 36 fn() 37 38 return fn 39 return inner 40 return outer 41 42 43 # @outer 44 @login('jingdong') 45 def home(): 46 time.sleep(2) 47 print('welcoming to home pages....') 48 49 # @outer 50 @login('weixin') 51 def finance(): 52 time.sleep(1) 53 print('welcoming to finance pages....') 54 55 # @outer 56 @login() 57 def book(): 58 time.sleep(3) 59 print('welcoming to select book......') 60 61 #打印,显示出所有的网页 62 msg=''' 63 请选择您要访问的网页 64 1/home 首页 65 2/finance 金融页面 66 3/book 图书页面 67 .... 68 ''' 69 70 while True: 71 print(msg) 72 page_num=input('请输入你要访问的网页的序号') 73 if page_num =='1': 74 home() 75 elif page_num=='2': 76 finance() 77 elif page_num=='3': 78 book() 79 80 else: 81 print('输入有误,重新输入')

浙公网安备 33010602011771号