Коротко: yield — это return, возвращающий генератор.
1. Итератор. mylist = [1, 2, 3]. mylist = [x*x for x in range(1,3)]
2. Генератор — это итератор, который можно пройти только один раз. Значения генерируются «на лету» и не хранятся в памяти.
mylist = (x*x for x in range(1,3))
3. yield — функция, возвращающая вместо значения генератор
>>> def createGenerator():
... mylist = range(3)
... for i in mylist:
... yield i*i
вернет генератор, который можно пройти только один раз.
Для чего это нужно? Часто нужно пройти последовательность, не загружая ее в память целиком. Допустим, построчная обработка набора больших файлов:
def get_lines(files):
for f in files:
for line in file.readlines():
yield line
и вызываем:
for line in get_lines(files):
#обрабатываем строку
http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained — лучший ответ
и его перевод : http://habrahabr.ru/post/132554/
Еще:
http://www.kigorw.com/articles/python-yield-generator
http://stackoverflow.com/questions/7883962/where-to-use-yield-in-python-best