zoukankan      html  css  js  c++  java
  • 无参装饰器 练习

    # 一:编写函数,(函数执行的时间用time.sleep(n)模拟)
    '''
    import time
    def info():
    start_time = time.time()
    time.sleep(3)
    print('欢迎来到王者荣耀!')
    stop_time=time.time()
    print('run time is %s' %(stop_time-start_time))

    info()
    '''
    # 二:编写装饰器,为函数加上统计时间的功能
    '''
    import time
    def timer(func):
    def wrapper(*args,**kwargs):
    start_time = time.time()
    res=func(*args,**kwargs)
    stop_time = time.time()
    print('run time is %s' % (stop_time - start_time))
    return res
    return wrapper
    @timer
    def info():
    time.sleep(3)
    print('欢迎来到王者荣耀!')

    info()
    '''
    # 三:编写装饰器,为函数加上认证的功能
    '''
    def auth(func):
    def wrapper(*args,**kwargs):
    name=input('请输入用户名称: ').strip()
    pwd=input('请输入用户密码: ').strip()
    if name == 'tank' and pwd == '123':
    res=func(*args,**kwargs)
    return res
    else:
    print('账号或密码错误')
    return wrapper

    @auth
    def index():
    print('认证成功!')

    index()
    '''
    # 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
    # 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
    '''
    dic={}
    def user_info(func):
    def wrapper(*args,**kwargs):
    with open('db.txt', mode='rt',encoding='utf-8')as f:
    for line in f:
    user,pwd,balance=line.strip().split(':')
    dic[user]=[pwd, balance]
    username=input('请输入用户名称:').strip()
    password=input('请输入用户密码:').strip()
    if username == user and password == dic[user][0]:
    res=func(*args,**kwargs)
    return res
    else:
    print('账号或密码错误!')
    return wrapper

    def incount():
    print('充值功能!')

    def outcount():
    print('转账功能!')
    @user_info
    def users():
    while True:
    msg = "'0':'退出','1': '充值','2': '转账'"
    print(msg)
    cmd = input('请输入命令编号>>: ').strip()
    if not cmd.isdigit():
    print('必须输入命令编号的数字')
    continue
    elif cmd not in msg:
    print('输入的命令不存在')
    continue
    else:
    if cmd == '0':
    break
    elif cmd == '1':
    incount()
    elif cmd == '2':
    outcount()

    users()
    '''
    # 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
    '''
    import time
    dic={}
    def user_info(func):
    def wrapper(*args,**kwargs):
    with open('db.txt', mode='rt',encoding='utf-8')as f:
    for line in f:
    user,pwd,balance=line.strip().split(':')
    dic[user]=[pwd, balance]
    username=input('请输入用户名称:').strip()
    password=input('请输入用户密码:').strip()
    if username == user and password == dic[user][0]:
    res=func(*args,**kwargs)
    return res
    else:
    print('账号或密码错误!')
    return wrapper

    def timer(func):
    def wrapper(*args,**kwargs):
    start_time = time.time()
    res=func(*args,**kwargs)
    stop_time = time.time()
    times=stop_time - start_time
    if times <= 1:
    return res
    else:
    print('登录超时,请重新登录!')
    return wrapper

    @timer
    def incount():
    print('充值功能!')

    @timer
    def outcount():
    print('转账功能!')

    @user_info
    def users():
    while True:
    msg = "'0':'退出','1': '充值','2': '转账'"
    print(msg)
    cmd = input('请输入命令编号>>: ').strip()
    if not cmd.isdigit():
    print('必须输入命令编号的数字')
    continue
    elif cmd not in msg:
    print('输入的命令不存在')
    continue
    else:
    if cmd == '0':
    break
    elif cmd == '1':
    incount()
    elif cmd == '2':
    outcount()

    users()
    '''
  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/0B0S/p/12555089.html
Copyright © 2011-2022 走看看