博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7.装饰器的一些需求
阅读量:4595 次
发布时间:2019-06-09

本文共 1641 字,大约阅读时间需要 5 分钟。

#编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件) #要求登录成功一次,后续的函数无需在输入程序名和密码
FLAG = Falsedef login(func):    def inner(*args,**kwargs):        global FLAG        if FLAG:           ret = func(*args,**kwargs)           return ret        else:           use_name = input('use_name:')           password = input("password:")           if use_name == 'yasuo' and password == 'kuaile':              FLAG = True              ret = func(*args, **kwargs)              return ret           else:              print('登录失败')    return inner@logindef shoplist_add():    print('添加一个物品')@logindef shoplist_del():    print("删除一个物品")shoplist_add()shoplist_del()
#编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件。
def wrapper(func):    def inner(*args,**kwargs):        with open('和好','a',encoding='utf-8') as f:            f.write(func.__name__+'\n')        ret = func(*args,**kwargs)        return ret    return inner@wrapperdef qq():    print('世界')@wrapperdef mm():    print('青春')qq()mm()
#进阶作业 #编写下载网页内容的函数,要求功能是:用户传一个url,函数返回下载页面的结果 #为题目1编写装饰器,实现缓存页面内容的功能: #具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0), # 就优先从文件中读取网页内容,否则就去下载
import osfrom urllib.request import urlopendef cache(func):    def inner(*args,**kwargs):       if os.path.getsize('和好'):         with open('和好','rb')as f:            return f.read()       ret = func(*args,**kwargs)       with open('和好','wb') as f:            f.write(b'*****'+ret)       return ret    return inner@cachedef get(url):    code = urlopen(url).read()    return coderet = get('http://www.baidu.com')print(ret)ret = get('http://www.baidu.com')print(ret)ret = get('http://www.baidu.com')print(ret)

 

  

转载于:https://www.cnblogs.com/8856S/p/9740383.html

你可能感兴趣的文章
对比 Git 与 SVN,这篇讲的很易懂
查看>>
【snmp】Linux开启snmp及查询
查看>>
CSU 1532: JuQueen(线段树)
查看>>
设定MyEclipse编辑代码区域文字的大小及非keyword的字体、字形和颜色
查看>>
LeetCode【6】. ZigZag Conversion --思路图解与java实现
查看>>
git 合并分支
查看>>
NSNotification与NSNotificationCenter
查看>>
qt 中文乱码 处理QByteArray类型里含中文的数据
查看>>
跨库事务一致性问题的解决方式(例)
查看>>
ios build时,Undefined symbols for architecture xxx问题的总结
查看>>
JavaScript对象
查看>>
IIS7(Windows7)下最简单最强安装多版本PHP支持环境
查看>>
关于Cocos2d-x发布游戏的时候遇到的问题和解决
查看>>
CSS学习笔记之样式声明
查看>>
rtmpdump代码分析 转
查看>>
codeforces #322 div 2 D. Three Logos (枚举)
查看>>
20145202马超《JAVA》预备作业1
查看>>
[导入]参考OpenSceneGraph的3ds插件学习lib3ds
查看>>
java基础-四大特征
查看>>
linux文档查看器
查看>>