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函数帮助查询小工具
Mar 13 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
numpy中的delete删除数组整行和整列的实例
May 09 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
python下对hsv颜色空间进行量化操作
Jun 04 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
pycharm Tab键设置成4个空格的操作
Feb 26 Python
Python快速实现一键抠图功能的全过程
Jun 29 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中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
JavaScript中string对象
2015/06/12 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
解决uWSGI的编码问题详解
2017/03/24 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
初中科学教学反思
2014/01/21 职场文书
小学生通知书评语
2014/12/31 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers