zoukankan      html  css  js  c++  java
  • 作业3月23号

    一:编写函数,(函数执行的时间用time.sleep(n)模拟)

    二:编写装饰器,为函数加上统计时间的功能

    import time
    def timmer(func):
        def wrapper(*args,**kwargs):
            start=time.time()
            res=func(*args,**kwargs)
            stop=time.time()
            print(stop - start)
            return res

    三:编写装饰器,为函数加上认证的功能

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

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

    import time
    login_user = None
    login_time = None
    
    def check_session(func):
        time_out = 4
        def wrapper(*args,**kwargs):
            global login_user,login_time
            res = func(*args,**kwargs)
            end = time.time()
            if end - login_time > time_out:
                login_user = None
                print('登陆超时')
                login_time = None
            return res
        return wrapper
    
    
    
    def check_login(func):
        def wrapper(*args, **kwargs):
            global login_user,login_time
            if login_user:
                func(*args, **kwargs)
            else:
                ipt_account = input('输入账号:').strip()
                ipt_pwd = input('输入密码:').strip()
                with open('db.txt', mode='rt', encoding='utf-8') as f:
                    for i in f:
                        if [ipt_account, ipt_pwd] == i.strip('
    ').split(':'):
                            login_user = ipt_account
                            print('登陆成功,现在可以使用功能')
                            login_time = time.time()
                            break
                    else:
                        print('账户名或密码错误,无法使用功能')
    
        return wrapper
    
    
    @check_session
    @check_login
    def func1(cmd):
        print('func1', cmd)
    
    
    
    @check_session
    @check_login
    def func2(cmd):
        print('func2', cmd)
    
    
    menu = {
        '1': ['func1', func1],
        '2': ['func2', func2],
        '3': ['exit', exit]
    }
    
    while True:
        for i in menu:
            print(i, menu[i][0])
    
        cmd = input('cmd:').strip()
        menu[cmd][1](cmd)
  • 相关阅读:
    通过HttpListener实现简单的Http服务
    WCF心跳判断服务端及客户端是否掉线并实现重连接
    NHibernate初学六之关联多对多关系
    NHibernate初学五之关联一对多关系
    EXTJS 4.2 资料 跨域的问题
    EXTJS 4.2 资料 控件之Grid 那些事
    EXTJS 3.0 资料 控件之 GridPanel属性与方法大全
    EXTJS 3.0 资料 控件之 Toolbar 两行的用法
    EXTJS 3.0 资料 控件之 combo 用法
    EXTJS 4.2 资料 控件之 Store 用法
  • 原文地址:https://www.cnblogs.com/jingpeng/p/12555482.html
Copyright © 2011-2022 走看看