python for循环函数 看不懂

sola_f 2014-10-28 08:37:27
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=[]


求前辈看看,这个for循环函数时啥意思不是很明白,还有下面的elif block: 这个下面的代码有啥作用呢
这是Python基础教程项目1,即时标记的练习题
...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sola_f 2014-10-28
  • 打赏
  • 举报
回复
引用 4 楼 u013171165 的回复:
# strip是一行数据里去掉两端的空格(返回'\n'时怎么处理呢?) 直接把\n去掉了,这下字符串里什么都没有,所以这时候执行block下面部分(#block列表为判断条件是什么意思?什么情况下执行这个语句? 解决了)
明白了 谢谢!
The_Third_Wave 2014-10-28
  • 打赏
  • 举报
回复
# strip是一行数据里去掉两端的空格(返回'\n'时怎么处理呢?) 直接把\n去掉了,这下字符串里什么都没有,所以这时候执行block下面部分(#block列表为判断条件是什么意思?什么情况下执行这个语句? 解决了)
sola_f 2014-10-28
  • 打赏
  • 举报
回复
引用 2 楼 u013171165 的回复:
解析有点错误,应该是for line in lines(file): lines返回的是一个生成器对象,line是文件里一行数据,然后是'\n',然后是数据交替出现。交替处理文件每一行和文件里面内容(通过blocks外部调用处理)最后出现协程效果。
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=[]#清缓存
感谢前辈的回答,这是我的理解你看看是不是这样的,还是有点不明白的,麻烦解答下,感激~~
The_Third_Wave 2014-10-28
  • 打赏
  • 举报
回复
解析有点错误,应该是for line in lines(file): lines返回的是一个生成器对象,line是文件里一行数据,然后是'\n',然后是数据交替出现。交替处理文件每一行和文件里面内容(通过blocks外部调用处理)最后出现协程效果。
The_Third_Wave 2014-10-28
  • 打赏
  • 举报
回复
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=[]#清缓存
这段代码已经是生成器的高级应用了,写出了协程的效果。

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧