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的Tornado框架异步编程入门实例
Apr 24 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
Python 3实战爬虫之爬取京东图书的图片详解
Oct 09 Python
实例讲解python中的序列化知识点
Oct 08 Python
python实现简单的单变量线性回归方法
Nov 08 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
python根据文本生成词云图代码实例
Nov 15 Python
Python函数基本使用原理详解
Mar 19 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
django为Form生成的label标签添加class方式
May 20 Python
python中的对数log函数表示及用法
Dec 09 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个技巧(4)
2006/10/09 PHP
php zend解密软件绿色版测试可用
2008/04/14 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
sina的lightbox效果。
2007/01/09 Javascript
prototype Element学习笔记(篇二)
2008/10/26 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
python实现目录树生成示例
2014/03/28 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Python断言assert的用法代码解析
2018/02/03 Python
Django--权限Permissions的例子
2019/08/28 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
会议开场欢迎词
2014/01/15 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
工商管理专业自荐信
2014/06/03 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
钢琴师观后感
2015/06/12 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
Python软件包安装的三种常见方法
2022/07/07 Python