退出for循环并在文件末尾返回

时间:2014-04-05 22:19:28

标签: python for-loop

我想遍历文件并返回每一行:

for i in master_file:
        columns = re.split('\s{2,}', i)
        last_name = columns[1]
        print(last_name)

如果我将print替换为return,它只会返回columns[1]作为第一行,但我想将其返回给所有行。所以我可以在我的函数中的其他地方使用该信息。

3 个答案:

答案 0 :(得分:9)

在这种情况下,您需要yield值,而不是return它:

for i in master_file:
        columns = re.split('\s{2,}', i)
        last_name = columns[1]
        yield last_name

完整样本:

def readLastNames ():
    for i in master_file:
            columns = re.split('\s{2,}', i)
            last_name = columns[1]
            yield last_name

for last_name in readLastNames ():
    print (last_name)

非常粗略的解释:yield将参数和控件传递回调用上下文,保持被调用上下文的状态,然后从那里恢复。

答案 1 :(得分:3)

而不是return,请使用yield

这就像一个回归,但它保持在迭代中的位置。

答案 2 :(得分:1)

你可以使用列表理解,

return [re.split('\s{2,}', line, 2)[1] for line in master_file]