【问题标题】:Struggling with python generator function [closed]挣扎于python生成器函数[关闭]
【发布时间】:2014-10-22 12:32:04
【问题描述】:

我查看了几个 yield 示例,但我不知道应该如何在我的任务中使用它。

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

- Pass file path to the function
- Read in word char by char and assign it to a variable
- ........ yield word

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

【问题讨论】:

  • 向我们展示您尝试过的代码并描述它应该做什么以及它实际做什么。

标签: python generator


【解决方案1】:

您的生成器函数的工作方式与将这些单词添加到列表中的非生成器函数完全一样。除了将它们添加到列表之外,您还需要生成单词。

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

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:所以只需逐个字符循环,将它们收集到一个列表或字符串中,每次找到空格或标点符号时,您都会找到一个单词。输出收集的字符,清除收集数据并继续循环
  • 感谢您的宝贵时间!我得到了它的工作。
猜你喜欢
  • 2021-08-26
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
相关资源
最近更新 更多