# 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),
# 要求登录成功一次,后续的函数都无需再输入用户名和密码
# FLAG = False
# def login(func):
# def inner(*args,**kwargs):
# global FLAG
# '''登录程序'''
# if FLAG:
# ret = func(*args, **kwargs) # func是被装饰的函数
# return ret
# else:
# username = input('username : ')
# password = input('password : ')
# if username == 'boss_gold' and password == '22222':
# FLAG = True
# ret = func(*args,**kwargs) #func是被装饰的函数
# return ret
# else:
# print('登录失败')
# return inner
#
# @login
# def shoplist_add():
# print('增加一件物品')
#
# @login
# def shoplist_del():
# print('删除一件物品')
#
# shoplist_add()
# shoplist_del() # 2.编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件
# def log(func):
# def inner(*args,**kwargs):
# with open('log','a',encoding='utf-8') as f:
# f.write(func.__name__+'\n')
# ret = func(*args,**kwargs)
# return ret
# return inner
#
# @log
# def shoplist_add():
# print('增加一件物品')
#
# @log
# def shoplist_del():
# print('删除一件物品') # shoplist_add()
# shoplist_del()
# shoplist_del()
# shoplist_del()
# shoplist_del()
# shoplist_del() # 进阶作业(选做):
# 1.编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果
# 2.为题目1编写装饰器,实现缓存网页内容的功能:
# 具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中
import os
from urllib.request import urlopen
def cache(func):
def inner(*args,**kwargs):
if os.path.getsize('web_cache'):
with open('web_cache','rb') as f:
return f.read()
ret = func(*args,**kwargs) #get()
with open('web_cache','wb') as f:
f.write(b'*********'+ret)
return ret
return inner @cache
def get(url):
code = urlopen(url).read()
return code # {'网址':"文件名"}
ret = get('http://www.baidu.com')
print(ret)
ret = get('http://www.baidu.com')
print(ret)
ret = get('http://www.baidu.com')
print(ret)

最新文章

  1. $是对string.Format的简化
  2. [New Portal]Windows Azure Virtual Machine (19) 关闭Azure Virtual Machine与VIP Address,Internal IP Address的关系(1)
  3. 77 swapon-激活Linux系统中交换空间
  4. PL/SQL之--存储过程
  5. java中的类修饰符、成员变量修饰符、方法修饰符。
  6. Codeforces Round #118 (Div. 2)
  7. 使用mongo-java-driver3.0.2.jar和mongodb3.0在java代码中的用户验证4
  8. jquery功能实现总结
  9. 十四、mysql 分区之 HASH && KEY
  10. POJ 3904 Sky Code
  11. STL之map和multimap(关联容器)
  12. I帧/P帧/B帧---术语解释
  13. 【学习OpenCV】——2.4对图像进行平滑处理
  14. css3盒子相关样式
  15. 【转】 Python调用(运行)外部程序
  16. solr的基础和安装
  17. [物理学与PDEs]第4章习题1 反应力学方程组形式的化约 - 动量方程与未燃流体质量平衡方程
  18. js去除字符串空格(空白符)
  19. SAPI
  20. 详解Google Chrome浏览器(操作篇)(上)

热门文章

  1. nginx配置指令auth_basic、auth_basic_user_file及相关知识
  2. js三种常见的对话框
  3. Java中正负数的存储方式-正码 反码和补码
  4. Go 开发关键技术指南 | Go 面向失败编程 (内含超全知识大图)
  5. celery 使用 - 3
  6. ECMAScript 6.0
  7. Hbuilder实用快捷键
  8. 测试环境docker-swarm安装部署
  9. IDEA导入maven项目不自动识别
  10. dfs & bfs总结