Apakah Anda terbiasa dengan bahasa fungsional lainnya? yaitu apakah Anda mencoba untuk mempelajari bagaimana python melakukan pemrograman fungsional, atau apakah Anda mencoba untuk belajar tentang pemrograman fungsional dan menggunakan python sebagai kendaraan?
Juga, apakah Anda memahami daftar?
map(f, sequence)
setara langsung (*) untuk:
[f(x) for x in sequence]
Bahkan, saya pikir map()
pernah dijadwalkan untuk dihapus dari python 3.0 sebagai mubazir (itu tidak terjadi).
map(f, sequence1, sequence2)
sebagian besar setara dengan:
[f(x1, x2) for x1, x2 in zip(sequence1, sequence2)]
(ada perbedaan dalam cara menangani kasus di mana urutannya memiliki panjang yang berbeda. Seperti yang Anda lihat, map()
mengisi Tidak ada ketika salah satu urutan habis, sedangkan zip()
berhenti ketika urutan terpendek berhenti)
Jadi, untuk menjawab pertanyaan spesifik Anda, Anda mencoba menghasilkan hasilnya:
foos[0], bars
foos[1], bars
foos[2], bars
# etc.
Anda bisa melakukan ini dengan menulis fungsi yang mengambil satu argumen dan mencetaknya, diikuti oleh bilah:
def maptest(x):
print x, bars
map(maptest, foos)
Atau, Anda dapat membuat daftar yang terlihat seperti ini:
[bars, bars, bars, ] # etc.
dan gunakan maptest asli Anda:
def maptest(x, y):
print x, y
Salah satu cara untuk melakukan ini adalah membangun daftar secara eksplisit sebelumnya:
barses = [bars] * len(foos)
map(maptest, foos, barses)
Atau, Anda bisa menarik itertools
modul. itertools
berisi banyak fungsi pintar yang membantu Anda melakukan pemrograman evaluasi gaya-malas dengan python. Dalam hal ini, kami ingin itertools.repeat
, yang akan menampilkan argumennya tanpa batas saat Anda mengulanginya. Fakta terakhir ini berarti bahwa jika Anda melakukannya:
map(maptest, foos, itertools.repeat(bars))
Anda akan mendapatkan output tanpa akhir, karena map()
terus berjalan selama salah satu argumen masih menghasilkan output. Namun, itertools.imap
seperti map()
, tetapi berhenti segera setelah iterable terpendek berhenti.
itertools.imap(maptest, foos, itertools.repeat(bars))
Semoga ini membantu :-)
(*) Agak berbeda dengan python 3.0. Di sana, map () pada dasarnya mengembalikan ekspresi generator.