迭代器、生成器&装饰器作业
迭代器、生成器&装饰器作业
- 过滤掉长度小于5的字符串列表,并将剩下的转换成大写字母
#方法一
li=['abcxdex','akdkfjkd','ldkkf','q','p']
li2=[i.upper()for i in li if len(i)>=5]
#方法二
li=['abcxdex','akdkfjkd','ldkkf','q','p']
li2=filter(lambda x :len(x)>5,li)
li3=[i.upper() for i in list(li2)]
print(li3)
求(x,y)其中x是1-10之间的偶数,y是1-10之间的奇数组成的元祖列表
结果:[(2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9), (6, 1), (6, 3), (6, 5), (6, 7), (6, 9), (8, 1), (8, 3), (8, 5), (8, 7), (8, 9)]
- 求(x,y)其中x是1-10之间的偶数,y是1-10之间的奇数组成的元祖列表
结果:[(2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9), (6, 1), (6, 3), (6, 5), (6, 7), (6, 9), (8, 1), (8, 3), (8, 5), (8, 7), (8, 9)]
li=[(x,y)for x in range(1,10) for y in range(11) if x%2==0 if y%2==1]
#或:li=[(x,y)for x in range(1,10) for y in range(11) if x%2==0 and y%2==1]
-
求list中3,6,9组成的列表
结果:list = [[1,2,3],[4,5,6],[7,8,9]]
li=[[i-2,i-1,i]for i in range(1,10) if i%3==0]
#或
li=[list(range(i-2,i+1))for i in range(1,10)if i%3==0]
- 构建一个列表:[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
li=list(zip([x for x in range(6)],[x for x in range(1,7)]))
#或
li=[(i,i+1)for i in range(0,6)]
- 写生成器,从文件中读取内容,在每一次读取到的内容之前加上“(*)”之后在返回给用户
def func():
with open('info',mode='r',encoding='utf-8')as f:
data=f.readline()
while data:
yield '(*)'+data
data=f.readline()
f=func()
try:
while True:
print(f.__next__().strip())
except:
print('结束')
#或
def func():
with open('info',mode='r+',encoding='utf-8')as f:
for line in f:
yield '(*)'+line.strip()
ge=func()
try:
while True:
print(ge.__next__().strip())
except:
print('结束')
- 处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都有输出在屏幕(用生成器)
def func1():
with open('info',mode='r+',encoding='utf-8')as f:
search=input('请输入要搜索的内容:')
for line in f :
if search in line:
yield line.strip()
else:
continue
ge=func1()
while True:
try:
print(next(ge))
except:
break
- 编写装饰器,为多个函数加上认证的功能(用户的账号和密码来源于文件)?
要求:登录成功一次,后续的函数都无需再输入用户名和密码。
flag=True
def login():
dic={}
global flag
with open('info',mode='r+',encoding='utf-8')as f:
for i in f.readlines():
li=i.strip().split(',')
dic[li[0]]=li[1]
username=input('用户名:')
if username in dic.keys():
pwd=input('密码:')
if dic[username]==pwd:
flag=False
break
else:
print('密码错误:')
else:
print('用户名不存在')
def timmer_out(flag):
def timmer(func):
def inner(*args,**kwargs):
if flag:
login()
ret=func(*args,**kwargs)
return ret
else:
ret=func(*args,**kwargs)
return ret
return inner
return timmer
@timmer_out(flag)
def func1():
print('登陆成功')
@timmer_out(flag)
def func2():
print('收藏成功')
func1()
func2()
- 编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名写入文件
flag=True
def timmer_out(flag):
def timmer(func):
def inner(*args,**kwargs):
if flag:
with open('text1',mode='a+',encoding='utf-8')as f:
f.write(func.__name__+'\n')
ret=func(*args,**kwargs)
return ret
else:
ret=func(*args,**kwargs)
return ret
return inner
return timmer
@timmer_out(flag)
def func1():
print('注册')
@timmer_out(flag)
def func2():
print('登陆')

浙公网安备 33010602011771号