tmp.txt
line number one
line number two
line number three
tmp.py
#!/usr/bin/env python
# coding=utf-8
def _main():
f = open('tmp.txt')
while [1 for line in [f.readline()] if line]:
print line[:-1]
if '__main__' == __name__:
_main()
当我调用脚本时会发生这种情况:
me@yazevnul-mac:tmp$ python tmp.py
line number one
line number two
line number three
是的我知道这是读取文件的错误方法,但是如何在循环体内使用变量line
以及为什么列表不是先构建的?因此,如果有人详细说明这段代码的工作原理,那将会非常有趣。
答案 0 :(得分:1)
对于while
循环的每次运行,将调用临时和未命名的列表,并将下一行作为唯一内容([f.readline()]
)。迭代这个,并为line
分配行内容。
外部列表理解如果[]
则获得not line
,[1]
获得line
。这决定了while循环是否继续。
由于在Python 2中实现列表理解的性质,line
泄漏了列表理解到函数的本地名称空间。
我不知道列表在哪里创建它应该在哪里:涉及2个列表,它们参与迭代或空白检查,并在使用后被丢弃。