python生成器函数


引例

实现一个函数,返回字符串里每个单词的首字母所对应的下标

方法一

用一个列表保存字符串里每个单词的首字母所对应的下标,然后返回这个列表即可

def index_words(text):
    result = []
    if text:
        result.append(0)
        for idx, letter in enumerate(text):
            if letter == ' ':
                result.append(idx + 1)
    return result

address = 'Four score and seven years ago...'
re = index_words(address)
输出: [0, 5, 11, 15, 21, 27]

方法二

使用生成器函数

def index_word_iter(text):
    if text:
        yield 0
    for idx, letter in enumerate(text):
        if letter == ' ':
            yield idx + 1

address = 'Four score and seven years ago...'
re = list(index_word_iter(address))
输出: [0, 5, 11, 15, 21, 27]

使用生成器函数的好处

需要用到的时候才产生数据,且每次只产生一个数据,消耗的内存少、效率高