python装饰器练习题及答案


Posted in Python onNovember 01, 2019

这篇文章主要介绍了python装饰器练习题及答案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一:编写装饰器,为多个函数加上认证的功能(用户的账号密码)

要求登录成功一次,后续的函数都无需输入用户名和密码

FLAG=False#此时还未登录 全局变量 写这个步骤的意义在于:方便 知道已经登录成功了,就不再重复登录

def login(func):#为多个函数加上的认证功能
  def inner(*args,**kwargs):#加上装饰器
    global FLAG#给函数内的全局变量赋值
    if FLAG:
      ret = func(*args, **kwargs) # func就是被装饰的函数
      return ret
  #'''写登录程序'''
    else:
      username=input('亲输入你的名字:')
      password=input('亲输入你的密码:')
      if username=='lxx' and password=='123':
        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()

二:编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件

def log(func):
  def inner(*args,**kwargs):
    with open('log','a',encoding='utf-8') as f:
      f.write(func.__name__)#每次调用函数都将被调用的函数名称写入文件
    ret=func(*args,**kwargs)
    return ret
  return inner

@log
def shoplist_add(): #两个函数有不同的功能
  print('增加一件物品')

@log
def shoplist_del():
  print('删除一件物品')

shoplist_add()
shoplist_del()

三:进阶作业:

1.编写下载网页内容的函数,要求功能是:用户传入一个URL,函数返回下载页面的结果

2.为题目一编写装饰器,实现缓存网页内容的功能

3.具体:实现下载的页面存放与文件中,如果文件内有值(文件大小不为零),就优先从文件中读取网页内容

import os
from urllib.request import urlopen
def cache(func):
  def inner(*args,**kwargs):
    if os.path.getsize('log'):#查看文件大小 如果不为零为 判断文件中是否有内容
      with open('log','rb') as f:
        return f.read()
    ret=func(*args,**kwargs)#请求网页的函数
    with open('log','wb') as f: #wb不需要encoding='utf-8'
      f.write(b'****vfd**' + ret) #下载的页面存放在文件中 将请求的结果写入文件
    return ret
  return inner

@cache
def get(url):
  code=urlopen(url).read
  return code

ret=get('https://shimo.im/docs/VN0BLgAIBdMVSa4S/read')
print(ret)
ret=get('https://shimo.im/docs/VN0BLgAIBdMVSa4S/read')
print(ret)
ret=get('https://shimo.im/docs/VN0BLgAIBdMVSa4S/read')
print(ret)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python模块学习 filecmp 文件比较
Aug 27 Python
Python subprocess模块学习总结
Mar 13 Python
Python封装shell命令实例分析
May 05 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
Python发展简史 Python来历
May 14 Python
python顺序执行多个py文件的方法
Jun 29 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
高考考python编程是真的吗
Jul 20 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
Django框架HttpRequest对象用法实例分析
Nov 01 #Python
Django框架HttpResponse对象用法实例分析
Nov 01 #Python
Django框架序列化与反序列化操作详解
Nov 01 #Python
redis数据库及与python交互用法简单示例
Nov 01 #Python
python验证码图片处理(二值化)
Nov 01 #Python
使用matlab或python将txt文件转为excel表格
Nov 01 #Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 #Python
You might like
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
layui的select联动实现代码
2019/09/28 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
Python读取网页内容的方法
2015/07/30 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
python正则表达式re之compile函数解析
2017/10/25 Python
机器学习python实战之手写数字识别
2017/11/01 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
《走一步再走一步》教学反思
2014/02/15 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
维护民族团结演讲稿
2014/08/27 职场文书