与python生成器函数斗争

与python生成器函数斗争,python,generator,Python,Generator,我已经检查了几个收益率示例,但我不知道如何在任务中使用它 我必须做一个生成器函数,它必须在调用时返回从文件中读取的一个字(然后获取下一个字,依此类推) 我想知道的唯一一件事是,如何让生成器函数产生一个单词,然后知道下一个单词是哪个。我不是在寻找现成的解决方案,我想了解发生了什么。您的生成器函数的工作原理与将这些单词添加到列表中的非生成器函数完全相同。除了不将它们添加到列表中之外,您将生成单词 因此,将它们添加到列表中的函数是: def per_word(filename): result

我已经检查了几个收益率示例,但我不知道如何在任务中使用它

我必须做一个生成器函数,它必须在调用时返回从文件中读取的一个字(然后获取下一个字,依此类推)


我想知道的唯一一件事是,如何让生成器函数产生一个单词,然后知道下一个单词是哪个。我不是在寻找现成的解决方案,我想了解发生了什么。

您的生成器函数的工作原理与将这些单词添加到列表中的非生成器函数完全相同。除了不将它们添加到列表中之外,您将生成单词

因此,将它们添加到列表中的函数是:

def per_word(filename):
    result = []

    with open(filename) as fh:
        for line in fh:
            for word in line.split():
                result.append(word)

    return result
生成器函数只会产生以下结果:

def per_word(filename):
    with open(filename) as fh:
        for line in fh:
            for word in line.split():
                yield word

向我们展示您尝试过的代码,并描述它应该做什么以及它实际做什么。另外,在Python 3.3+中,您可以使用
yield from line.split()
替换该内部循环。问题是,据说我必须逐字符读取文件。这一部分让我不明白如何生成一个由读入的字符组成的单词。@swenn:但这与生成器函数的工作方式完全不同!找出如何在循环中形成单词,可以将单词附加到列表中,然后也可以将其作为生成器。@swenn:所以只需逐个字符循环,将它们收集到列表或字符串中,每次找到空格或标点符号,就可以找到单词。生成收集的字符,清除收集的数据并继续循环谢谢您的时间!我让它工作了。
def per_word(filename):
    with open(filename) as fh:
        for line in fh:
            for word in line.split():
                yield word