Сайт Игоря Кононученко   Статьи

Python yield — простым языком

21 декабря 2008
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> def a():
...     yield 1
...     yield []
...     yield [21, 212]
...     yield [21, 21222]
...     yield [21]
...
>>> b = a()
>>> b.next()
1
>>> b.next()
[]
>>> b.next()
[21, 212]
>>> b.next()
[21, 21222]
>>> b.next()
[21]
>>> b.next() # уже нет значений, сейчас будет эксепшн
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
Надеюсь, теперь понятно, что делает это команда. Фактически в функции встроен скрытый массив result, в который мы добавляем значения при вызове yield. При вызове next мы делаем pop из возвращенного значения. Можно также бежать по результату вызова функции (итератору) a как по обычному массиву
1
2
for elem in a():
...
Continuous Integration в django-проекте
Template из Prototype.js на C# 3.0
Ctrl
Динамические запросы (фильтры) в django
Симметрия кода