day16作业:

作业:

1、编写课上讲解的有参装饰器准备明天默写

def outter2(mode):
	def outter1(func):
		def wrapper(*args,**kwargs):
			inp_name=input('your name==>').strip()
			inp_pwd=input('your pwd==>').strip()
			if mode == 'file':
				print('认证来源==>file')
				with open('user.txt','rt',encoding='utf-8')as f:
					for line in f:
						name,pwd=line.strip().split(":")
						if inp_name == name and inp_pwd == pwd:
							print('login_successful')
							res = func(*args,**kwargs)
							return res
					else:
						print('name or pwd error')
			elif mode == 'ldap':
				print('认证来源==>ldap')
			elif mode == 'mysql':
				print('认证来源==>mysql')
			else:
				print('未知的认证来源')
		return wrapper
	return outter1

@outter2('file')
def index(x,y):
	print('index==>',x,y)
index(1,2)

2:还记得我们用函数对象的概念,制作一个函数字典取代多分支if的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作

dic = {}
def outter(func):
	def wrapper(*args,**kwargs):
		dic['name']=func
		res = func(*args,**kwargs)
		print(dic)
		return res

	return wrapper

@outter
def login():
	print('登录功能===>')
login()
@outter
def register():
	print('注册功能===>')
register()
@outter
def transfer(user1,user2,money):
	print('转账功能===>')
transfer('ceshi1','ceshi2',1000)

3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定=》有参装饰器

注意:时间格式的获取
import time
time.strftime(’%Y-%m-%d %X’)

import time
def outter2(path):
	def outter1(func):
		def wrapper(*args,**kwargs):
			with open(path,'at',encoding='utf-8')as f:
				f.write('%s:%s run\n'% (time.strftime('%Y-%m-%d %H:%M:%S'),func.__name__))
				res = func(*args,**kwargs)
				return res
		return wrapper
	return outter1
@outter2('access.log')
def index(x,y):
	print('index===>',x,y)
index(1,2)

4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象

str = 'hello'
l = [111,222,333]
t = (1111,2222,3333,4444,5555)
d = {'k1':111,'k2':222,'k3':333}
set = {'a','b','c'}

def wrapper(x):
	while True:
		try:
			print(next(x))
		except StopIteration:
			break

wrapper(iter(str))
wrapper(iter(l))
wrapper(iter(t))
wrapper(iter(d))
wrapper(iter(set))
wrapper(iter_f)

def wrapper(path):
	with open(path,'rt',encoding='utf-8')as f:
		iter_f=iter(f)
		while True:
			try:
				print(next(iter_f))
			except StopIteration:
				break
wrapper('user.txt')

猜你喜欢

转载自blog.csdn.net/yikenaoguazi/article/details/106909415