Connaissez-vous d'autres langages fonctionnels? c'est-à-dire essayez-vous d'apprendre comment python fait de la programmation fonctionnelle, ou essayez-vous d'apprendre la programmation fonctionnelle et l'utilisation de python comme véhicule?
Aussi, comprenez-vous les compréhensions de listes?
map(f, sequence)
est directement équivalent (*) à:
[f(x) for x in sequence]
En fait, je pense map()
que la suppression de python 3.0 était autrefois redondante (cela ne s'est pas produit).
map(f, sequence1, sequence2)
équivaut principalement à:
[f(x1, x2) for x1, x2 in zip(sequence1, sequence2)]
(il y a une différence dans la façon dont il gère le cas où les séquences sont de longueur différente. Comme vous l'avez vu, map()
remplit None lorsque l'une des séquences s'épuise, alors que zip()
s'arrête lorsque la séquence la plus courte s'arrête)
Donc, pour répondre à votre question spécifique, vous essayez de produire le résultat:
foos[0], bars
foos[1], bars
foos[2], bars
# etc.
Vous pouvez le faire en écrivant une fonction qui prend un seul argument et l'affiche, suivi de barres:
def maptest(x):
print x, bars
map(maptest, foos)
Vous pouvez également créer une liste qui ressemble à ceci:
[bars, bars, bars, ] # etc.
et utilisez votre maptest d'origine:
def maptest(x, y):
print x, y
Une façon de faire serait de construire explicitement la liste au préalable:
barses = [bars] * len(foos)
map(maptest, foos, barses)
Vous pouvez également insérer le itertools
module. itertools
contient de nombreuses fonctions intelligentes qui vous aident à faire de la programmation d'évaluation paresseuse de style fonctionnel en python. Dans ce cas, nous voulons itertools.repeat
, qui affichera son argument indéfiniment au fur et à mesure que vous l'itérerez. Ce dernier fait signifie que si vous faites:
map(maptest, foos, itertools.repeat(bars))
vous obtiendrez une sortie sans fin, car map()
continue tant que l'un des arguments produit encore une sortie. Cependant, itertools.imap
c'est juste comme map()
, mais s'arrête dès que l'itérable le plus court s'arrête.
itertools.imap(maptest, foos, itertools.repeat(bars))
J'espère que cela t'aides :-)
(*) C'est un peu différent en python 3.0. Là, map () renvoie essentiellement une expression de générateur.