• 装饰器


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

    import time
    
    
    def count_time():
        start = time.time()
        time.sleep(1)
        print('我是输出的内容!我要花费零点几毫秒的时间
    ')
        stop = time.time()
        print('函数一共运行时间为:', stop - start)
    
    
    count_time()

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

    import time
    
    
    def timer(func):
        def swapper(*args, **kwargs):
            start = time.time()
            res = func(*args, **kwargs)
            stop = time.time()
            print(stop - start)
            return res
    
        return swapper
    
    
    @timer
    def single():
        time.sleep(1)
        print('what are you waiting for?')
    
    
    single()

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

    import time
    
    
    def id(func):
        def wrapper(*args, **kwargs):
            account = input('account:').strip()
            password = input('password:').strip()
            if account == 'avery' and password == '123':
                res = func(account)
            else:
                print('wrong password')
        return wrapper
    
    
    @id
    def single(name):
        print('why are you waiting for %s?' % name)
        return 'fish'
    
    single('avery')

    4. 编写装饰器,为多个函数加上认证的功能

    # 用户的账号密码来源于文件,要求登录成功一次,后续的函数都无需再输入用户名和密码
    # 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
    
    import time
    
    login_user = {'name': None, 'start_time': None}
    
    
    def login(func):
        def wrapper(*args, **kwargs):
            if login_user['name']:  # 此段代码的精髓,经过一次登录后,后续函数无需再次验证用户名密码
                return func(*args, **kwargs)
            account = input('your account:').strip()
            code = input('your password:').strip()
            with open(r'db.txt', 'rt', encoding='utf-8') as f:
                for line in f:
                    line = line.strip()
                    # print(line,type(line))
                    user_dic = eval(line)
                    # print(user_dic,type(user_dic))
                    # user_dic = eval(user_dic)
                    # print(user_dic,type(user_dic))
                    if account in user_dic['name']:
                    # if account in user_dic:
                        if code == user_dic['password']:
                            # global login_user['name']
                            login_user['name'] = account
                            login_user['start_time'] = time.time()
                            return func(*args, **kwargs)
                        else:
                            print('Code err')
                            break
                else:
                    print('user is not find')
    
        return wrapper
    
    
    @login
    def index():
        time.sleep(1)
        print('Why are you waiting1 for %s' % login_user['name'])
    
    
    @login
    def home():
        time.sleep(2)
        print('Why are you waiting2 for %s' % login_user['name'])
    
    
    index()
    home()
  • 相关阅读:
    百度地图bd map使用方法
    Nodejs学习笔记2
    Nodejs学习笔记-1
    npm的安装和使用?
    如何使用jqueryUi的datepicker日历控件?
    如何 使用vim的 session和viminfo 恢复上一次工作的环境??
    Yii使用笔记 2
    关于link标签的用法, 不声明rel=stylesheet则无效? 在ff中必须声明rel属性!
    物联网产业链八大环节全景图
    一场改变你投资生涯的讨论:职业德州扑克手看交易
  • 原文地址:https://www.cnblogs.com/avery-w/p/14193315.html
Copyright © 2020-2023  润新知