这里发生了什么?
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
答案 0 :(得分:0)
"压缩循环"被称为generator expressions,它们或多或少等同于返回生成器而不是列表的list comprehensions。
在您正在查看的代码中,stripped
生成器表达式str.strip()
是打开文件的每一行,而lines
生成器表达式会删除stripped
生成器中的所有空行{1}}。最终结果是生成器(lines
),当迭代时,将生成文件的非空行的剥离版本。
值得注意的是,由于您只是使用生成器,因此在运行这些行之后实际上还没有从文件中读取任何内容。如果您结束with
阻止,文件将被关闭并尝试从lines
提取任何内容将导致I / O错误。因此,您想要做的任何事情都必须在该区块内完成。