• 20.03.23作业


    import time
    # 一:编写函数,(函数执行的时间用time.sleep(n)模拟)
    # def index():
    # time.sleep(3)
    # print('执行完毕')
    # index()
    # 二:编写装饰器,为函数加上统计时间的功能
    # def timer(func):
    # def wrapper(*args,**kwargs):
    # start_time = time.time()
    # func(*args,**kwargs)
    # stop_time = time.time()
    # print('执行时间为:',stop_time - start_time)
    # return wrapper
    # @timer
    # def index():
    # time.sleep(3)
    # print('执行完毕')
    # index()
    # 三:编写装饰器,为函数加上认证的功能
    # def auth(func):
    # def wrapper(*args,**kwargs):
    # user = input('请输入用户名:').strip()
    # pwd = input('请输入密码:').strip()
    # if user == 'egon' and pwd == '123':
    # func(*args,**kwargs)
    # else:
    # print('用户名或密码错误')
    # return wrapper
    # @auth
    # def index():
    # time.sleep(3)
    # print('执行完毕')
    # index()



    # 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
    # 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
    # login_user=None
    # def auth(func):
    # def wrapper(*args,**kwargs):
    # global login_user
    # if login_user == None:
    # print('请先登录'.center(30,'*'))
    # user = input('请输入用户名:').strip()
    # pwd = input('请输入密码:').strip()
    # with open(r'user.txt','r',encoding='utf-8') as f:
    # for line in f:
    # # print(line)
    # user_info = eval(line)
    # if user == user_info['name'] and pwd == user_info['password']:
    # print('认证成功'.center(30,'*'))
    # login_user = user
    # func(*args,**kwargs)
    # else:
    # print('认证失败'.center(30,'*'))
    # else:
    # func(*args,**kwargs)
    # return wrapper
    #
    # @auth
    # def recharge():
    # print('这是充值功能'.center(30,'*'))
    #
    # @auth
    # def transfer_accounts():
    # print('这是转账功能'.center(30,'*'))
    #
    # @auth
    # def reflect():
    # print('这是提现功能'.center(30,'*'))
    #
    # @auth
    # def check_the_balance():
    # print('这是查询余额功能'.center(30,'*'))
    #
    # @auth
    # def sign_out():
    # print('这是退出功能'.center(30,'*'))
    # login_dic = {
    # '0': (sign_out,'退出'),
    # '1': (recharge,'充值'),
    # '2': (transfer_accounts,'转账'),
    # '3': (reflect,'提现'),
    # '4': (check_the_balance,'查询余额')
    # }
    # while True:
    # for k in login_dic:
    # print('{}---{}'.format(k,login_dic[k][1]))
    # cmd = input('请输入指令:').strip()
    # if not cmd.isdigit():
    # print('请输入数字指令')
    # if cmd not in login_dic:
    # print('请输入正确的指令')
    # else:
    # login_dic.get(cmd)[0]()

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

    # login_user=None
    # login = {'login_time': 0,'out_time':5}
    # def auth(func):
    # def wrapper(*args,**kwargs):
    # global login_user
    # start_time = time.time()
    # if login_user == None:
    # print('请先登录'.center(30,'*'))
    # user = input('请输入用户名:').strip()
    # pwd = input('请输入密码:').strip()
    # with open(r'user.txt','r',encoding='utf-8') as f:
    # for line in f:
    # user_info = eval(line)
    # if user == user_info['name'] and pwd == user_info['password']:
    # print('认证成功'.center(30,'*'))
    # login_user = user
    # func(*args, **kwargs)
    # #如果登录时间超过5s下次执行指令需重新登录
    # login['login_time'] = time.time()
    # if login['login_time'] - start_time > login['out_time']:
    # login_user = None
    # else:
    # print('认证失败'.center(30,'*'))
    # else:
    # func(*args,**kwargs)
    # return wrapper
    #
    # @auth
    # def recharge():
    # print('这是充值功能'.center(30,'*'))
    #
    # @auth
    # def transfer_accounts():
    # print('这是转账功能'.center(30,'*'))
    #
    # @auth
    # def reflect():
    # print('这是提现功能'.center(30,'*'))
    #
    # @auth
    # def check_the_balance():
    # print('这是查询余额功能'.center(30,'*'))
    #
    # @auth
    # def sign_out():
    # print('这是退出功能'.center(30,'*'))
    # login_dic = {
    # '0': (sign_out,'退出'),
    # '1': (recharge,'充值'),
    # '2': (transfer_accounts,'转账'),
    # '3': (reflect,'提现'),
    # '4': (check_the_balance,'查询余额')
    # }
    # while True:
    # for k in login_dic:
    # print('{}---{}'.format(k,login_dic[k][1]))
    # cmd = input('请输入指令:').strip()
    # if not cmd.isdigit():
    # print('请输入数字指令')
    # if cmd not in login_dic:
    # print('请输入正确的指令')
    # else:
    # login_dic.get(cmd)[0]()

    # 六:选做题
    # 思考题(选做),叠加多个装饰器,加载顺序与运行顺序,可以将上述实现的装饰器叠加起来自己验证一下
    # @deco1 # index=deco1(deco2.wrapper的内存地址)
    # @deco2 # deco2.wrapper的内存地址=deco2(deco3.wrapper的内存地址)
    # @deco3 # deco3.wrapper的内存地址=deco3(index)
    # def index():
    # pass


    def outter1(func):
    print("outter1")
    def inner(*args, **kwargs):
    print("====outter1 start====")
    func(*args, **kwargs)
    print("====outter1 end====")
    return inner


    def outter2(func):
    print("outter2")
    def inner(*args, **kwargs):
    print("====outter2 start====")
    func(*args, **kwargs)
    print("====outter2 end====")
    return inner

    @outter1
    @outter2
    def f():
    print("****执行完毕****")

    f()


    '''运行结果:
    outter2
    outter1
    ====outter1 start====
    ====outter2 start====
    ****执行完毕****
    ====outter2 end====
    ====outter1 end====

    '''
    # 装饰器函数执行的先后顺序是离原函数越近越先执行,它会一层一层的运行,外层运行完毕后再运行内层,内层outter2执行完毕后,outter1又在outter2基础上再运行
  • 相关阅读:
    梅花雨控件使用时注意的...
    利用XML实现通用WEB报表打印(实现篇)
    Improve performance using ADO.NET 2.0 batch update feature
    hook
    owc11生成饼状图
    PHP数组合并:[“+”运算符]、[array_merge]、[array_merge_recursive]区别
    PHP中使用函数array_merge()合并数组
    WCF 第四章 绑定
    WCF 第四章 绑定 跨机器通信
    WCF 第六章 序列化与编码 系列文章
  • 原文地址:https://www.cnblogs.com/zhangjinyi97/p/12554677.html
Copyright © 2020-2023  润新知