给每个函数写一个记录日志的功能,要求,每次一调用函数之前,都要将函数名称,时间节点记输出。
请使用strftime()获取年月日时分秒。函数名:fn.__name__
import time import functools def strftime(fn): @functools.wraps(fn) def wrapper(*args,**kwargs): whenbegin = time.time() s = fn(*args,**kwargs) whenend = time.time() print('[现在的时间是:%s] 函数名:%s,运行时间:%.6f,运行返回值结果:%d' %(time.ctime(), fn.__name__,whenbegin - whenend,s)) return s return wrapper @strftime def add(s1,s2): time.sleep(1) return s1+s2 print(add(1,10))
编写装饰器,在每次执行目标函数之前先让用户输入用户名和密码,给用户三次机会,登录成功才能访问目标函数。
def login(fun1): def inner(*args, **kwargs): num = 3 while num: name = input('请输入用户名:').strip() password = input('请输入密码:') if name == '1925060156' and password == '123456': print('登录成功') fun1() break else: if num != 1: print('用户名或密码错误,请重新输入(还有{}次机会)!'.format(num - 1)) num -= 1 if num == 0: print('你已用完了三次机会,请改天登录') return inner @login def read(): print(''' ◢█★█◣ / ╭  ̄  ̄ ╮ ╭  ̄  ̄ ╮ / ╭ ̄ ╮  ̄ ̄ ̄ ̄ ̄ ̄ ̄/ ╭  ̄╮ ╰╯ | | ╰╯ /. ╰ __ ╯ / ̄\ / ̄\ ╰ __ ╯ | | \ ╰^╯ / ╰ ?_____ ╯ ''') @login def write(): print('这个能不能实现') read() write()
编写装饰器,为多个函数加上登录认证功能,(用户有3次登录机会), 要求,如果登录成功了,后续就不用再登录了。
user.py
user={ 'account1':False, 'users':'1925060156', 'init':'123456'}
from user import * def login(fn): def inner(*args,**kwargs): if user['account1']==False: num = 0 while num<3: username=input("请输入用户名:") password=input("请输入密码:") if username==user['users'] and password==user['init']: print("登陆成功~") user['user_is_login']=True ret=fn(*args,**kwargs) return inner else: print("登录失败!") num=num+1 print("三次机会已使用完毕,无法登录!") return inner @login def read(): print('''ヽ(ˋДˊ)ノ ヽ(ˋ▽ˊ)ノ °(°ˊДˋ°) ° ┑( ̄▽  ̄)┍ ┑( ̄Д  ̄)┍ ┑( ̄。。 ̄)┍ ╮(╯Д╰)╭ ╮(╯▽╰)╭ (≧﹏ ≦) ( ̄ε  ̄)''') @login def write(): print('这个可不可以一次性出来') read() write()
def deco1(func): def record(*args,**kwargs): import time print('函数名称:',func.__name__) print('调用时间节点:',time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))) func(*args,**kwargs) return record def deco2(func): def register(*args,**kwargs): m = 3 for i in range(1, 4): name = input('请输入用户名:') pwd = input('请输入密码:') if (name == 'admin' and pwd == '123'): print('成功登陆!') func(*args,**kwargs) break else: m = m - 1 print('登陆失败请重新登陆,你还剩%d次机会' % m) if m == 0: print('三次机会已经用完,请下次再试!') return register def deco_isRegister(flag): def deco3(func): def register1(*args, **kwargs): if(flag==True): func(*args,**kwargs) else: m = 3 for i in range(1, 4): name = input('请输入用户名:') pwd = input('请输入密码:') if (name == 'admin' and pwd == '123'): print('成功登陆!') func(*args, **kwargs) break else: m = m - 1 print('登陆失败请重新登陆,你还剩%d次机会' % m) if m == 0: print('三次机会已经用完,请下次再试!') return register1 return deco3 @deco1 @deco2 # @deco_isRegister(False) def hello(): print('nijhao') hello()