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 相关文章推荐
pygame学习笔记(4):声音控制
Apr 15 Python
Python编码类型转换方法详解
Jul 01 Python
Python内置模块logging用法实例分析
Feb 12 Python
python操作excel文件并输出txt文件的实例
Jul 10 Python
python+pygame实现坦克大战
Sep 10 Python
python实现超市商品销售管理系统
Nov 22 Python
python实现按关键字筛选日志文件
Dec 24 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
Python tkinter常用操作代码实例
Jan 03 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
教你利用python实现企业微信发送消息
May 23 Python
python 实现体质指数BMI计算
May 26 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 session有效期问题
2009/04/26 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
Django中Model的使用方法教程
2018/03/07 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
基于python3的socket聊天编程
2020/02/17 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
校庆接待方案
2014/03/18 职场文书
大学生学习计划书
2014/09/15 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
Python数据结构之队列详解
2022/03/21 Python