Вы знакомы с другими функциональными языками? то есть вы пытаетесь узнать, как 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 () по существу возвращает выражение генератора.