Вы знакомы с другими функциональными языками? т.е. вы пытаетесь узнать, как Python выполняет функциональное программирование, или вы пытаетесь узнать о функциональном программировании и использовании Python в качестве средства передвижения?
Кроме того, вы понимаете состав списков?
map(f, sequence)
прямо эквивалентен (*):
[f(x) for x in sequence]
На самом деле, я думаю, что map()
когда-то планировалось удалить из python 3.0 как избыточный (этого не произошло).
map(f, sequence1, sequence2)
в основном эквивалентно:
[f(x1, x2) for x1, x2 in zip(sequence1, sequence2)]
(есть разница в том, как он обрабатывает случай, когда последовательности имеют разную длину. Как вы видели, map()
заполняется None, когда одна из последовательностей заканчивается, тогда как zip()
останавливается, когда останавливается самая короткая последовательность)
Итак, чтобы ответить на ваш конкретный вопрос, вы пытаетесь получить результат:
foos[0], bars
foos[1], bars
foos[2], bars
# etc.
Вы можете сделать это, написав функцию, которая принимает единственный аргумент и печатает его, за которым следуют полосы:
def maptest(x):
print x, bars
map(maptest, foos)
В качестве альтернативы вы можете создать список, который будет выглядеть так:
[bars, bars, bars, ] # etc.
и используйте свой исходный маптест:
def maptest(x, y):
print x, y
Один из способов сделать это - заранее явно создать список:
barses = [bars] * len(foos)
map(maptest, foos, barses)
Как вариант, вы можете вставить itertools
модуль. itertools
содержит множество умных функций, которые помогут вам выполнять программирование с отложенным вычислением в функциональном стиле на Python. В данном случае мы хотим itertools.repeat
, чтобы аргумент выводился бесконечно при повторении по нему. Этот последний факт означает, что если вы это сделаете:
map(maptest, foos, itertools.repeat(bars))
вы получите бесконечный вывод, так как map()
будет продолжаться до тех пор, пока один из аргументов все еще производит вывод. Тем не менее, itertools.imap
это то же map()
самое, но останавливается, как только останавливается самая короткая итерация.
itertools.imap(maptest, foos, itertools.repeat(bars))
Надеюсь это поможет :-)
(*) В python 3.0 все немного по-другому. Там map () по существу возвращает выражение генератора.