例:要求查出字符串中每个单词的首字母,在整个字符串里的位置。
def index_words(text):
result = []
if text:
result.append(0)
for index, letter in enumerate(text):
if letter == ' ':
result.append(index + 1)
return result
上面这个函数有两个问题:
- 每次找到新的结果,都要调用append方法,但我们应该强调的不是append,而是值index+1。于是在函数主体的130个字符里,重要的只有75个左右。
- 在返回前,所有结果都存在列表里,如果输入量非常大,程序就可能耗尽内存崩溃
另一种写法:
def index_words(text):
if text:
yield 0
for index, letter in enumerate(text):
if letter == ' ':
yield index + 1
result = list(index_words(text))
要点:
- 使用生成器比把收集到的结果放入列表里返回的写法更清晰
- 无论输入量多大,也不用担心内存耗尽
网友评论