37,721
社区成员
发帖
与我相关
我的任务
分享
def lines(file):
for line in file:yield line
yield '\n'
def blocks(file):
block=[]
for line in lines(file): #for循环函数?
if line.strip():
block.append(line)
elif block:
yield ''.join(block).strip()
block=[]
def blocks(file):
block=[]
for line in lines(file): #for循环,每次循环调用lines(file)里面代码,执行到yield line时返回一个迭代值(即文件里一行数据),下次从yield '\n'执行(返回空行)
if line.strip(): # strip是一行数据里去掉两端的空格(返回'/n'时怎么处理呢?)
block.append(line) # 去掉两端空格的数据添加进list
elif block: #block列表为判断条件是什么意思?什么情况下执行这个语句?
yield ''.join(block).strip()
block=[]#清缓存
感谢前辈的回答,这是我的理解你看看是不是这样的,还是有点不明白的,麻烦解答下,感激~~def lines(file):
for line in file:yield line
yield '\n'
def blocks(file):
block=[]
for line in lines(file): #你得明白lines返回的是一个生成器对象,line是文件里一行数据(文件结束了时候只有'\n')
if line.strip(): # strip是一行数据里去掉两端的空格
block.append(line) # 去掉两端空格的数据添加进list
elif block: #当'\n'时最后全部处理成功了,也就是文件里极大可能是没有空行的(否则逻辑可能有点乱)
yield ''.join(block).strip() #又是yield,最后输出所有行的数据
block=[]#清缓存
这段代码已经是生成器的高级应用了,写出了协程的效果。