day14作业

一:编写函数,(函数执行的时间用time.sleep(n)模拟)
import time
def f(x):
	time.sleep(1)
	print(x)
f(1)
二:编写装饰器,为函数加上统计时间的功能
import time
def f(x):
	time.sleep(1)
	print(x)
start_time = time.time()
f(1)
end_time = time.time()
print('运行时间为%d秒'%(end_time-start_time))
三:编写装饰器,为函数加上认证的功能
def outer(func):
	def inner(*args,**kwargs):
		name = input('请输入用户名:').strip()
		psw = input('请输入密码:').strip()
		if name == 'egon' and psw == '123':
			print('登录成功')
			res = func(*args,**kwargs)
			return res
		else:
			print('登录失败')
	return inner
四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式

def outer(func):
	def inner(*args,**kwargs):
		#先取得账号密码
		dic = {}
		with open('user.txt','r',encoding='utf-8')as f:
			for i in f:
				k,v = i.strip('\n').split(':')
				dic[k] = v
			#登录
			while True:
				name = input('请输入用户名:').strip()
				psw = input('请输入密码:').strip()
				if name in dic and psw == dic[name]:
					print('登录成功')
					res = func(*args, **kwargs)
					return res
				else:
					print('登录失败')
	return inner

五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
import time
login_time = 0
login_user = None
def outer(func):
	def inner(*args,**kwargs):

		global login_user
		if login_user == None:
			#先取得账号密码
			dic = {}
			with open('user.txt','r',encoding='utf-8')as f:
				for i in f:
					k,v = i.strip('\n').split(':')
					dic[k] = v
				#登录
				sign = True
				while sign:
					name = input('请输入用户名:').strip()
					psw = input('请输入密码:').strip()
					if name in dic and psw == dic[name]:
						print('登录成功')
						global login_time
						login_time = time.time()
						login_user = name
						print(login_time)
						res = func(*args, **kwargs)
						end_time = time.time()
						print(end_time)
						if end_time - login_time >=6:
							print('已超时,重新登录')
							login_user = None
						return res
					else:
						print('登录失败')
		else:
			res = func(*args, **kwargs)
			end_time = time.time()
			if end_time - login_time >= 6:
				print('已超时,重新登录')
				login_user = None
			return res
	return inner
六:编写装饰器,为多个函数加上记录日志的功能:函数一旦运行则按照下述格式记录日志
    函数开始执行的时间  函数名  返回值
    2020-06-18 12:13:38  index  456
    2020-06-18 12:13:39  home  123


    提示:
        统计时间time.strftime('%Y-%m-%d %H:%M:%S')
        函数名func.__name__
import time
from functools import wraps
# print('函数开始执行的时间 '+'{: ^10}'.format('函数名')+'返回值')
def outer(func):
	@wraps(func)
	def inner(*args,**kwargs):
		res = func(*args,**kwargs)
		real_time = time.strftime('%Y-%m-%d %H:%M:%S')
		name = func.__name__
		with open('a.log','a',encoding='utf-8')as fp:
			fp.write('{}\t{: ^8}\t{}\n'.format(real_time,name,res))
		return res
	return inner
@outer#f = outer(f)
def ffff(x):
	time.sleep(1)
	print(x)
	return 111
ffff(1)
@outer
def qqqq(x):
	time.sleep(1.2)
	print(x)
	return 222
qqqq(2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值