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('输入有误,重新输入')

 

posted @ 2018-06-27 13:41  巨兽~墨菲特  阅读(132)  评论(0)    收藏  举报