day14作业

帅兰


# 一:编写函数,(函数执行时间用time.sleep(n)代表)

import time



def func():
    time.sleep(1)


start_time = time.time()
func()
stop_time = time.time()
print(stop_time - start_time)

# 二:编写装饰器,为函数加上统计时间的功能
def timer(func):

    def wapper(*args, **kwargs):
        start_time = time.time()
        res = func(*args, **kwargs)
        stop_time = time.time()
        print(stop_time - start_time)
        return res

    return wapper


@timer
def foo():
    time.sleep(1)
    print('随便一点内容')


foo()

# 三:编写装饰器,为函数加上认证的功能
# 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
# 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式

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


# 六 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
# 注意:时间格式的获取
# import time
# time.strftime('%Y-%m-%d %X')

# 四合一
import time

login_users = None
a = time.time()


def outter(x):
    def outter1(func):
        def wapper(*args, **kwargs):
            res = func(*args, **kwargs)
            global login_users, a
            if login_users is None:
                print('请先登入')
                name = input('请输入用户名:').strip()
                pwd = input('请输入密码:').strip()
                with open('e.txt', mode='rt', encoding='utf-8')as f:
                    for i in f:
                        name1, pwd1 = i.strip().split(':')
                        if name1 == name and pwd == pwd1:
                            print('登入成功,只有十五秒操作时间哦')
                            a = time.time()
                            a = a + 15

                            login_users = name
                            with open(x, mode='a+t', encoding='utf-8')as f1:
                                y = time.strftime('%Y-%m-%d %X')
                                f1.write(f'用户{name}于{y}登入了\n')
                        else:
                            print('账号密码错误')
            return res

        return wapper

    return outter1


@outter(x='z.txt')
def recharge():
    global login_users, a
    b = time.time() - 3
    if a < b:
        print('操作时间已过,请重新登入')
        login_users = None
        outter(1)
    elif login_users is None:
        outter(1)
    else:
        print('充值功能已启动')



@outter(x='z.txt')
def balance():
    global login_users
    b = time.time() - 2
    if a < b:
        print('操作时间已过,请重新登入')
        login_users = None
        outter(1)
    if login_users is None:
        outter(1)
    else:
        print('查询余额功能已启动')


dic = {'1': [recharge, '充值'],
       '2': [balance, '余额']}


def homepage():
    while 1:
        for i in dic:
            print(f'{i}:{dic[i][1]}')
        print('输入0退出')
        nbr = input('请输入功能对应的数字:')
        if nbr == '1':
            dic[nbr][0]()
        elif nbr == '2':
            dic[nbr][0]()
        elif nbr == '0':
            print('已退出')
            return
        else:
            print('请输入正确命令')


homepage()

# 八:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作

# 当前技术暂时跟上面合不起来 不研究了 浪费时间
def outter0(func):
    def wrapper(*args, **kwargs):
        i = 1
        while True:
            if i in dic:
                i += 1
            else:
                dic[i] = func.__name__
                res = func(*args, **kwargs)
                return res

    return wrapper
    
def func1():
pass


def func2():
pass

func1()
func2()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值