装饰器实例

1.用装饰器实现访问两个网页只用输入一次密码

flag = False           #标志位
def login(func):
    def inner(*args, **kwargs):
        global flag
        if flag == False:
            username = input('用户名:')
            password = input('密码:')
            if username == "alex" and password == "123":
                print("登陆成功")
                flag = True
        if flag == True:    #如果不加入判断,就会有两次密码输入
            ret = func(*args,**kwargs)
            return ret
    return inner

@login
def art():
    print('欢迎来到文章页')
@login
def dar():
    print('欢迎来到日记野')
art()
dar()

结果:
用户名:alex
密码:123
登陆成功
欢迎来到文章页
欢迎来到日记野

 

2.生成日志系统

def wrapper(func):
    def inner(*args,**kwargs):
        ret = func(*args,**kwargs)
        the_Name = func.__name__
        f = open('log', 'a', encoding="utf-8")
        f.write("你访问了%s\n"% the_Name)
        f.close()
        return ret
    return inner

@wrapper
def f1():
    print("欢迎来到凤凰大视野")

@wrapper
def f2():
    print("欢迎来到东方卫视")

f1()
f2()

结果:
欢迎来到凤凰大视野
欢迎来到东方卫视

文件中的存入:
你访问了f1
你访问了f2
你访问了f1
你访问了f2
你访问了f1
你访问了f2
你访问了f1

 3.实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中

from urllib.request import urlopen

def wrapper(func):
    def inner(*args,**kwargs):
        with open('web','rb') as f:
            web_content = f.read()   #如何判断文件存在了?

        if not web_content:       #如果文件不存在,
            web_content = func(*args,**kwargs)
            with open('web','wb') as f:
                f.write(web_content)

        return web_content
    return inner

@wrapper
def get_url(url):
    content = urlopen(url).read()
    return content

web_content = get_url("http://www.cnblogs.com/Eva-J/articles/7194277.html")
print(web_content)

 

posted @ 2017-12-20 15:43  明王不动心  阅读(201)  评论(0编辑  收藏  举报