首页 > 解决方案 > Python:在函数本身中打印解析函数的结果,还是让函数返回结果并将其打印为外部调用函数?

问题描述

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

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()

但是,如果我希望 parse 函数返回一个值,而 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是默认返回值,但我没有得到的是,当我尝试在文件中保存更长的行时,它似乎并不重要,并且会一直打印出来None。它会以某种方式弄乱文件的偏移量吗?在我看来,这两个版本的代码都应该表现得一样,但事实并非如此。任何人都可以解释为什么会这样吗?

标签: pythonloopsparsingreturn

解决方案


这是 a 的经典用法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)

你几乎肯定用过range这样的。


推荐阅读