我的问题可能是基本问题,但我没有找到任何答案。我的目标是编写一个程序来解析文本文件中的新条目,并在行超过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
。难道它会以某种方式弄乱文件的偏移吗?在我看来,两个版本的代码应该以相同的方式行事,但事实并非如此。谁能解释为什么会这样?
答案 0 :(得分:0)
当您在var flattenedUsers = users.SelectMany(users => users);
var result = Enumerable.Concat(flattenedUsers, moreUsers).GroupBy(users.Country);
功能中打印时,您会反复打印所有长度的行> 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)
。