for line in (l.replace("- ", " - ") for l in open("input.dat")): print line 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

for line in (l.replace("- ", " - ") for l in open("input.dat")): print line

Поиск

for i in xrange(N): yield a

a, b = b, a + b

 

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

 

for i in Fib(100): print i,

 

Однако следует заметить,что программа в значительной степени упростилась.

 

Генераторное выражение

 

ВPython 2.4по аналогии со списковым включением появилось генераторное выражение.По синтаксису оно аналогично списковому,но вместо квадратных скобок используются круглые.Списковое включение порождает список,а,значит,можно ненароком занять очень много памяти.Генератор же,получающийся в результате применения генераторного выражения,списка не создает,он вычисляет каждое следующее значение строго по требованию(при вызове метода next()).

 

В следующем примере можно прочесть из файла строки,в которых производятся некоторые замены:

 

for line in (l.replace("- ", " - ") for l in open("input.dat")): print line

 

Ничто не мешает использовать итераторы и для записи в файл:

 

 


open("output.dat", "w").writelines(

 

l.replace(" - ", " - ") for l in open("input.dat"))

 

Здесь для генераторного выражения не потребовалось дополнительных скобок,так как оно расположено внутри скобок вызова функции.

 

Карринг

 

БиблиотекаXoltar toolkit (авторBryn Keller)включает модуль functional,который

 

позволяет упростить использование возможностей функционального программирования.Модуль functional применяет"чистый" Python.Библиотеку можно найти по адресу:

http://sourceforge.net/projects/xoltar-toolkit.

 

При карринге(частичном применении)функции создается новая функция,задавая некоторые аргументы исходной.Следующий пример иллюстрирует частичное применение вычитания:

 

from functional import curry def subtract(x, y):

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 63; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.009 с.)