-
给每个函数写一个记录日志的功能,要求,每次一调用函数之前,都要将函数名称,时间节点记输出。
请使用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()