Чи знайомі ви з іншими функціональними мовами? тобто ви намагаєтеся дізнатись, як 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 () по суті повертає вираз генератора.