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连接sql server乱码的解决方法
Jan 28 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
python生成式的send()方法(详解)
May 08 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
Tensorflow实现将标签变为one-hot形式
May 22 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 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
php向js函数传参的几种方法
2014/08/10 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
php日期操作技巧小结
2016/06/25 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
JavaScript delete操作符应用实例
2009/01/13 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
Python程序设计入门(4)模块和包
2014/06/16 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
java判断三位数的实例讲解
2019/06/10 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
基于Python共轭梯度法与最速下降法之间的对比
2020/04/02 Python
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
高级电工工作职责
2013/11/21 职场文书
教师个人学习总结
2015/02/11 职场文书
实习护士自荐信
2015/03/25 职场文书
复兴之路展览观后感
2015/06/02 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle