Bonjour
Attention aux termes. Inverser l'ordre des paramètres ce n'est absolument pas la même chose que d'inverser le nom logique des paramètres. Ca implique alors de changer aussi cet ordre lors de l'appel. Donc il faut que ta dernière instruction soit print(img_search(image, lst_image)).
Prenons un exemple simple: une fonction "trouve()" qui indique si un élément se trouve dans un tableau
def trouve(elem, tab): return elem in tab
Et un exemple de son appel: trouve("a", "Hello World").
Si tu permutes juste le nom logique des paramètres...
def trouve(tab, elem): return tab in elem
... alors bon déjà le sens "naturel" du code de la fonction devient un peu illogique mais quoi qu'il en soit ça fonctionne toujours si tu ne changes rien dans son appel => trouve("a", "Hello World").
Si maintenant tu permutes la signification de ces paramètres, alors tu changes à la fois le code de la fonction...
def trouve(tab, elem): return elem in tab
... et aussi tu changes ta façon de l'appeler => trouve("Hello World", "a").
Toi tu as changé l'ordre des paramètres sans changer ta façon d'appeler la fonction.
Par ailleurs la fonction reduce() prend 3 paramètres qui sont - une sous-fonction à appliquer (qui, de son côté, ne doit accepter que 2 paramètres)
- un itérable
- une valeur d'initialisation facultative
La fonction reduce() applique alors la sous-fonction sur chaque élément de l'itérable qu'elle passe comme second argument à la sous-fonction. Et le premier argument de cette sous-fonction est le résultat du traitement de l'élément précédent de l'itérable (sauf pour le permier élément de l'itérable qui, lui, ne pouvant pas bénéficier du traitement de l'élément précédent, utilise alors la valeur d'initialisation).
Il en résulte que quels que soient l'ordre de tes paramètres dans la lambda mère, le second élément de reduce() doit-être un itérable. Or dans ton second appel, le second paramètre de reduce() est "s or S in l" ce qui n'est pas un itérable.
Bref ton souci se situe à la fois dans ta façon de voir la phrase "permuter les paramètres" et dans l'utilisation de reduce() mais pas dans celui des lambda...
Partager