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下线程之间的共享和释放示例
May 04 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
Python中操作符重载用法分析
Apr 29 Python
Python使用剪切板的方法
Jun 06 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
python+Splinter实现12306抢票功能
Sep 25 Python
Python3列表内置方法大全及示例代码小结
May 10 Python
python 梯度法求解函数极值的实例
Jul 10 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 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
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
php中关于换行的实例写法
2019/09/26 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
Node.js中require的工作原理浅析
2014/06/24 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
小程序实现锚点滑动效果
2019/09/23 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
初学者学习Python好还是Java好
2020/05/26 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
《槐乡五月》教学反思
2014/04/25 职场文书
物流管理专业推荐信
2014/09/06 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
sql字段解析器的实现示例
2021/06/23 SQL Server