Python:在函数本身中打印解析函数的结果,或者让函数返回结果并将其打印成外部调用函数?

时间:2018-05-08 21:33:28

标签: python loops parsing return

我的问题可能是基本问题,但我没有找到任何答案。我的目标是编写一个程序来解析文本文件中的新条目,并在行超过5个字符时输出它们。请考虑以下按预期工作的代码:

.git/config.lock

但是如果我希望parse函数返回一个值而main函数打印返回的内容,我会在输出中反复得到from pygtail import Pygtail def parse(input): for line in input: if len(line) > 5: print(line) def main(): tail = Pygtail('D:\\test.txt') while True: parse(tail) main() 。错误的代码:

None

我知道from pygtail import Pygtail def parse(input): for line in input: if len(line) > 5: return line def main(): tail = Pygtail('D:\\test.txt') while True: x = parse(tail) print(x) main() 是默认的返回值,但我没有得到的是当我尝试在文件中保存更长的行时,它似乎并不重要并且将始终保持打印出None。难道它会以某种方式弄乱文件的偏移吗?在我看来,两个版本的代码应该以相同的方式行事,但事实并非如此。谁能解释为什么会这样?

2 个答案:

答案 0 :(得分:0)

当您在var flattenedUsers = users.SelectMany(users => users); var result = Enumerable.Concat(flattenedUsers, moreUsers).GroupBy(users.Country); 功能中打印时,您会反复打印所有长度的行&gt; 5.当你从函数parse()结束时,你会在{em>第一次迭代中结束执行return,这会导致你失去结果。< / p>

答案 1 :(得分:0)

这是At least two subnets must be specified的经典用法。这是一个类似函数的项,每次调用时都会返回一个结果;在每次连续的呼叫中,它将从中断的地方继续。你迭代结果。

generator

您几乎肯定会像这样使用def parse(input): for line in input: if len(line) > 5: yield line def main(): tail = Pygtail('D:\\test.txt') for x in parse(tail): print(x)