我正在创建一个程序来读取本地存储在C盘上的日志文件。此日志文件不断更新,我的程序只在日志中打印新的文本行,而不是以前存储的行。我需要在控制台中打印线条的相同功能,以返回线条本身。我能看到的唯一方法是将for返回到for循环中,但这不可能,因为它结束了函数。
我需要这个函数来读取行以返回行,因为返回的行将被发送到另一个函数,该函数解释该行以识别其中的某些数据。
如何在函数中循环返回或将数据从函数传递到另一个函数?
我在Windows 8.1上 Python v2.7.9
答案 0 :(得分:4)
在迭代时使用generator function生成数据。生成器可以在迭代它们时无休止地生成数据:
def read_log_lines(filename):
while True:
# code to read lines
if is_new(line):
yield line
此函数在被调用时返回一个生成器对象。然后,您可以在列表上循环遍历该对象,并且每次迭代生成器函数中的代码时都将运行,直到它到达yield
语句。此时,生成的值将作为迭代的下一个值返回,生成器函数将暂停,直到您再次迭代为止。
所以你会这样使用它:
for new_line in read_log_lines(filename):
# new_line was produced by the generator function