21 февр. 2010 г.

Простые сложности

Изучаю язык Пайтон на интуит.ру. С ужасом читаю описания некоторых конструкций языка. Такое ощущение, что автор сам не понял материал и поэтому нагоняет кучу тумана, чтобы другие не поняли, что он не понял.
Дабы не быть голословным, вот пример - описание функций генераторов:

Простые генераторы

Разработчики языка не остановились на итераторах. Как оказалось, в интерпретаторе Python достаточно просто реализовать простые генераторы. Под этим термином фактически понимается специальный объект, вычисления в котором продолжаются до выработки очередного значения, а затем приостанавливаются до возникновения необходимости в выдаче следующего значения. Простой генератор формируется функцией-генератором, которая синтаксически похожа на обычную функцию, но использует специальный оператор yield для выдачи следующего значения. При вызове такая функция ничего не вычисляет, а создает объект с интерфейсом итератора для получения значений. Другими словами, если функция должна возвращать последовательность, из нее довольно просто сделать генератор, который будет функционально эквивалентной "ленивой" реализацией. Ленивыми называются вычисления, которые откладываются до самого последнего момента, когда получаемое в результате значение сразу используется в другом вычислении.

Для примера с последовательностью Фибоначчи можно построить такой вот генератор:

def Fib(N):
a, b = 0, 1
for i in xrange(N):
yield a
a, b = b, a + b

Использовать его не сложнее, чем любой другой итератор:

for i in Fib(100):
print i,

Более извращенного описания простой концепции, я не видел. Кому интересно, про генераторы намного понятнее написано здесь (англ.).

Комментариев нет:

Отправить комментарий