よく分かんないと思ってドキュメント見てたらようやく分かった。
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
なるほど、イテレータを作るために使えばいいのか。
yieldを宣言すると、data[index]をreturnして、一旦処理を中断。
で、イテレータからnext()が呼ばれると処理を再開してまたdata[index](さっきより++されている)を返すと。
んでもってジェネレータ関数内のローカル変数と中断時の位置は保存してくれる。
ようやくすっきりした。