为什么这个脚本有效?

时间:2014-08-17 07:28:48

标签: python python-2.7

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以及为什么列表不是先构建的?因此,如果有人详细说明这段代码的工作原理,那将会非常有趣。

1 个答案:

答案 0 :(得分:1)

对于while循环的每次运行,将调用临时和未命名的列表,并将下一行作为唯一内容([f.readline()])。迭代这个,并为line分配行内容。

外部列表理解如果[]则获得not line[1]获得line。这决定了while循环是否继续。

由于在Python 2中实现列表理解的性质,line泄漏了列表理解到函数的本地名称空间。

我不知道列表在哪里创建它应该在哪里:涉及2个列表,它们参与迭代或空白检查,并在使用后被丢弃。