语法:在python中压缩For循环

时间:2018-04-03 14:17:40

标签: python python-2.7

这里发生了什么?

with open('contractors.txt','r') as in_file:  
    stripped = (line.strip() for line in in_file)   
    lines = (line for line in stripped if line)

这是句法等同于:

for line in in_file:
    stripped = line.strip()
for line in stripped:
    lines =  line

1 个答案:

答案 0 :(得分:0)

"压缩循环"被称为generator expressions,它们或多或少等同于返回生成器而不是列表的list comprehensions

在您正在查看的代码中,stripped生成器表达式str.strip()是打开文件的每一行,而lines生成器表达式会删除stripped生成器中的所有空行{1}}。最终结果是生成器(lines),当迭代时,将生成文件的非空行的剥离版本。

值得注意的是,由于您只是使用生成器,因此在运行这些行之后实际上还没有从文件中读取任何内容。如果您结束with阻止,文件将被关闭并尝试从lines提取任何内容将导致I / O错误。因此,您想要做的任何事情都必须在该区块内完成。