Conosci altri linguaggi funzionali? cioè stai cercando di imparare come funziona la programmazione funzionale di python o stai cercando di imparare a conoscere la programmazione funzionale e l'utilizzo di python come veicolo?
Inoltre, capisci la comprensione dell'elenco?
map(f, sequence)
è direttamente equivalente (*) a:
[f(x) for x in sequence]
In effetti, penso che map()
una volta era previsto che fosse rimosso da Python 3.0 come ridondante (ciò non è accaduto).
map(f, sequence1, sequence2)
è principalmente equivalente a:
[f(x1, x2) for x1, x2 in zip(sequence1, sequence2)]
(c'è una differenza nel modo in cui gestisce il caso in cui le sequenze sono di diversa lunghezza. Come hai visto, map()
riempie Nessuno quando una delle sequenze si esaurisce, mentre si zip()
ferma quando la sequenza più breve si ferma)
Quindi, per rispondere alla tua domanda specifica, stai provando a produrre il risultato:
foos[0], bars
foos[1], bars
foos[2], bars
# etc.
Puoi farlo scrivendo una funzione che accetta un singolo argomento e lo stampa, seguito da barre:
def maptest(x):
print x, bars
map(maptest, foos)
In alternativa, è possibile creare un elenco simile al seguente:
[bars, bars, bars, ] # etc.
e usa il tuo maptest originale:
def maptest(x, y):
print x, y
Un modo per farlo sarebbe quello di compilare esplicitamente l'elenco in anticipo:
barses = [bars] * len(foos)
map(maptest, foos, barses)
In alternativa, è possibile inserire il itertools
modulo. itertools
contiene molte funzioni intelligenti che ti aiutano a eseguire la programmazione di valutazione pigra in stile funzionale in Python. In questo caso, vogliamo itertools.repeat
, che produrrà il suo argomento a tempo indeterminato man mano che si procede su di esso. Quest'ultimo fatto significa che se lo fai:
map(maptest, foos, itertools.repeat(bars))
otterrai un output infinito, dal momento che map()
continua fino a quando uno degli argomenti continua a produrre output. Tuttavia, itertools.imap
è proprio come map()
, ma si interrompe non appena si interrompe il più breve iterabile.
itertools.imap(maptest, foos, itertools.repeat(bars))
Spero che questo ti aiuti :-)
(*) È un po 'diverso in Python 3.0. Lì, map () restituisce essenzialmente un'espressione del generatore.