作业:
1、编写课上讲解的有参装饰器准备明天默写
def auth(db_type):
def deco(func):
def wrapper(*args,**kwargs):
name=input('请输入用户名:').strip()
pwd=input('请输入密码:').strip()
if db_type=='file':
print('基于文件验证')
if name=='tank'and pwd=='123':
res=func(*args,**kwargs)
return res
else:
print('账号或密码错误')
elif db_type=='mysql':
print('基于mysql验证')
elif db_type=='ldap':
print('基于ldap验证')
else:
print('不支持该db_type')
return wrapper
return deco
@auth(db_type='file')
def index(x,y):
print('index===>>>%s%s' %(x,y))
@auth(db_type='mysql')
def home(name):
print('home==>>$s' % name)
@auth(db_type='ldap')
def transfer():
print('transfer')
index(1,3)
home(tank)
transfer()
2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,
然后在每个函数前加上装饰器,完成自动添加到字典的操作
dict_func={}
def func_key(func_key):
def deco(func):
def inner(*args,**kwargs):
if func_key==1:
print('1模式')
dict_func['1']=str(func)
elif func_key==2:
print('2模式')
dict_func['2'] = str(func)
elif func_key==0:
print('0模式')
dict_func['0'] = str(func)
res = func(*args, **kwargs)
return res
return inner
return deco
@func_key(func_key=1)
def register():
pass
@func_key(func_key=2)
def login():
pass
@func_key(func_key=0)
def exit():
pass
register()
print(dict_func)
login()
print(dict_func)
exit()
print(dict_func)
3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
注意:时间格式的获取
import time
time.strftime('%Y-%m-%d %X')
def outter(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
with open(r'C:\Users\ccf\PycharmProjects\S14\day18\access.log', mode='a', encoding='utf-8') as f:
f.seek(0, 2)
f.write('{} {} run\n'.format(time.strftime('%Y-%m-%d %X'),func.__name__))
return res
return wrapper
@outter
def f1(x,y):
print('大力出奇迹%s %s 号' %(x,y))
f1(1,3)
4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象
str1='hello'
str1_iterator=str1.__iter__()
while True:
try:
print(str1_iterator.__next__())
except StopIteration:
break
print('====>')
list1=['h','e','l','l','o']
list1_iterator=list1.__iter__()
while True:
try:
print(list1_iterator.__next__())
except StopIteration:
break
print('====>')
tuple1=('hello',['h','e','l','l','o'])
tuple1_iterator=tuple1.__iter__()
while True:
try:
print(tuple1_iterator.__next__())
except StopIteration:
break
print('====>')
dict1={'name':'egon','pwd':'123','balance':'250'}
dict1_iterator=dict1.__iter__()
while True:
try:
print(dict1_iterator.__next__())
except StopIteration:
break
print('====>')
set1={'h','e','l','l','o'}
set1_iterator=set1.__iter__()
while True:
try:
print(set1_iterator.__next__())
except StopIteration:
break
print('====>')
with open(r'C:\Users\ccf\PycharmProjects\S14\day18\adb.txt',mode='rt',encoding='utf-8') as f:
f_iterator=f.__iter__()
while True:
try:
print(f_iterator.__next__())
except StopIteration:
break
5、自定义迭代器实现range功能
def my_range(start,stop,step):
while start<stop:
yield start
start+=step
for k in my_range(1,8,2):
print(k)