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程序与MySQL的教程
Apr 29 Python
Python计算一个文件里字数的方法
Jun 15 Python
python 实现登录网页的操作方法
May 11 Python
python逆序打印各位数字的方法
Jun 25 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
12个步骤教你理解Python装饰器
Jul 01 Python
Django 开发环境配置过程详解
Jul 18 Python
扩展Django admin的list_filter()可使用范围方法
Aug 21 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
python模板入门教程之flask Jinja
Apr 11 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
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
javascript学习网址备忘
2007/05/29 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
vue框架中props的typescript用法详解
2020/02/17 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
Python动态加载模块的3种方法
2014/11/22 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
手写一个python迭代器过程详解
2019/08/27 Python
运动会领导邀请函
2014/02/05 职场文书
党支部换届选举方案
2014/05/08 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
南京青奥会口号
2014/06/12 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技