Posts Tagged: yield

yield

Коротко: 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):
    #обрабатываем строку

via

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