装饰器

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()
原文地址:https://www.cnblogs.com/avery-w/p/14193315.html