装饰器实例
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)