码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器实例

时间:2017-12-20 16:47:35      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:color   fun   *args   __name__   日志系统   web   否则   网页   存在   

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)

 

装饰器实例

标签:color   fun   *args   __name__   日志系统   web   否则   网页   存在   

原文地址:http://www.cnblogs.com/yangmingxianshen/p/7771879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!