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 相关文章推荐
使用TensorFlow实现二分类的方法示例
Feb 05 Python
利用python实现对web服务器的目录探测的方法
Feb 26 Python
pyqt5 实现工具栏文字图片同时显示
Jun 13 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
学习Python列表的基础知识汇总
Mar 10 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
python访问hdfs的操作
Jun 06 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 Python
PyQt5中QSpinBox计数器的实现
Jan 18 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 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
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
Jquery 学习笔记(一)
2009/10/13 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
python实现简单登陆流程的方法
2018/04/22 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python3排序的实例方法
2020/10/20 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
python实现简单的学生管理系统
2021/02/22 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
党课学习思想汇报
2014/01/02 职场文书
日化店促销方案
2014/03/26 职场文书
给公司的建议书范文
2014/05/13 职场文书