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实现的阳历转阴历(农历)算法
Apr 25 Python
python计算牛顿迭代多项式实例分析
May 07 Python
Python批量更改文件名的实现方法
Oct 29 Python
Python 新建文件夹与复制文件夹内所有内容的方法
Oct 27 Python
Python实现分段线性插值
Dec 17 Python
python可视化实现代码
Jan 15 Python
python实现windows倒计时锁屏功能
Jul 30 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
python 利用panda 实现列联表(交叉表)
Feb 06 Python
10张动图学会python循环与递归问题
Feb 06 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
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
php图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
Python中的包和模块实例
2014/11/22 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
对Python 语音识别框架详解
2018/12/24 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
html5唤醒APP小记
2019/03/27 HTML / CSS
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
创建精神文明单位实施方案
2014/03/08 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
生物技术专业求职信
2014/06/10 职场文书
高中运动会广播稿
2014/09/16 职场文书
幸福来敲门观后感
2015/06/04 职场文书
鸡毛信观后感
2015/06/11 职场文书
创业计划书之宠物店
2019/09/19 职场文书
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript