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 threading多线程编程实例
Sep 18 Python
Python生成数字图片代码分享
Oct 31 Python
python使用PyCharm进行远程开发和调试
Nov 02 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 Python
Python同步遍历多个列表的示例
Feb 19 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
python如何将两张图片生成为全景图片
Mar 05 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 Python
python3中布局背景颜色代码分析
Dec 01 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
nicejforms——美化表单不用愁
2007/02/20 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
js读取本地文件的实例
2017/12/22 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
给Python初学者的一些编程技巧
2015/04/03 Python
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
Python上下文管理器和with块详解
2017/09/09 Python
django中模板的html自动转意方法
2018/05/27 Python
Python3.4解释器用法简单示例
2019/03/22 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
python实现定时发送邮件
2020/12/23 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
电台编导求职信
2014/05/06 职场文书
英文感谢信范文
2015/01/21 职场文书
2015公司年度工作总结
2015/05/14 职场文书
教师旷工检讨书
2015/08/15 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
实用求职信模板范文
2019/05/13 职场文书
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python