• 8.1每日课后作业系列之函数装饰器运用


    # 今日作业:
    # 默写:
    # 开闭原则
    # 什么样的函数称为闭包
    # python中什么是装饰器
    # 装饰器的两个原则
    #
    #
    # 一:编写函数,(函数执行的时间是随机的)
    # import time
    # import random
    # def time1():
    # print('you are D,S,B')
    # time.sleep(random.random())

    # 二:编写装饰器,为函数加上统计时间的功能
    # import time
    # import random
    # def outter(func):
    # def wrapper(*args,**kwargs):
    # start=time.time()
    # res=func(*args,**kwargs)
    # stop=time.time()
    # print('run time:%s' %(stop-start))
    # return res
    # return wrapper

    # @outter
    # def time1():
    # print('you are D,S,B')
    # time.sleep(random.random())
    #
    # time1()
    # 三:编写装饰器,为函数加上认证的功能
    # def outter(func):
    # def wrapper(*args,**kwargs):
    # name=input('用户名:')
    # pwd=input('密码:')
    # if name=='egon' and pwd=='123':
    # print('登录成功')
    # #在调用函数前加功能
    # res=func(*args,**kwargs) #调用被装饰的也就是最原始的那个函数
    # #在调用函数后加功能
    # return res
    # else:
    # print('用户名或密码错误')
    # return wrapper

    # 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
    # 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
    # from functools import wraps
    import time
    def auth(func):
    # @wraps
    def wrapper(*args,**kwargs):
    while True:
    name=input('用户名:')
    pwd=input('密码:')
    with open ('db1.txt',mode='r',encoding='utf-8') as f:
    for line in f:
    line=line.strip(' ')
    line=eval(line)
    if name in line['name']:
    if line['pwd']==pwd:
    print('登录成功')
    res=func(*args,**kwargs)
    return res
    else:
    print('密码错误')
    else:
    print('用户名不存在')
    return wrapper
    @auth
    def index():
    print('.......')
    time.sleep(4)
    index()

    # 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录



    # 六:编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果
    #
    # 七:为题目五编写装饰器,实现缓存网页内容的功能:
    # 具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中
    #
    # 扩展功能:用户可以选择缓存介质/缓存引擎,针对不同的url,缓存到不同的文件中
    #
    # 八:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作
    #
    # 九 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
    # 注意:时间格式的获取
    # import time
    # time.strftime('%Y-%m-%d %X')
  • 相关阅读:
    如何写工程代码——重新认识面向对象
    java 利用同步工具类控制线程
    java简易excel导入导出工具(封装POI)
    二叉搜索树的简单介绍
    spring security 配置多个AuthenticationProvider
    spring和UEditor结合
    继承后的执行顺序
    【转】WPF中实现自定义虚拟容器(实现VirtualizingPanel)
    <译>自学WPF系列(1)
    <译>C#使用设计模式和软件设计原则构建应用程序 PartIII
  • 原文地址:https://www.cnblogs.com/Maikes/p/9458869.html
Copyright © 2020-2023  润新知