装饰器
1. 编写函数,(函数执行的时间用time.sleep(n)模拟)
import time def count_time(): start = time.time() time.sleep(1) print('我是输出的内容!我要花费零点几毫秒的时间\n') 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()