0

这是我拥有的相关代码。它使用生成器从文件中获取单词。但是,在输入函数之前,单词首先存储到变量中。这个对吗?

这是否利用了生成器功能?

def do_something(words):
    new_list = {}
    for word in words:
        // do stuff to each word
        // then add to new_list
    return new_list

def generate_words(input_file):
    for line in input_file:
        for word in line.split(' '):
            // do stuff to word
            yield word

if __name__ == '__main__':
    with open("in.txt") as input_file:
        words = generate_words(input_file)
        do_something(words)

谢谢

4

3 回答 3

4

当你 make 时words = generate_words(input_file),你只是给它一个对新创建的生成器的引用。当你运行do_something时,那是生成器实际迭代的时候,words只是对它的引用。所以答案是肯定的,你正在利用生成器。

于 2013-04-19T06:07:59.143 回答
2

代码看起来不错。存储的words内容是准备在其中运行代码的新生成器generate_wordsfor word in words:代码仅在触发时才会实际运行。如果您想了解更多,这个 SO question有一大堆信息。

于 2013-04-19T06:09:54.667 回答
-1

在给定的示例中使用生成器没有任何优势。主要目的是减少内存使用。

在代码中:

for line in input_file:

line已经从文件中读取并消耗了内存。然后split操作创建新列表并再次消耗内存。

所以你所要做的就是遍历列表项。

虽然生成器的使用将导致创建生成器对象,该对象从现有列表中产生对象。这是完全没用的。

于 2013-04-19T06:45:39.993 回答