J'ai un tuple de fonctions que je veux pré-charger avec certaines données. Actuellement, la façon dont je fais cela est ci-dessous. Essentiellement, je fais une liste des nouvelles fonctions, et j'y ajoute les fonctions lambda une à la fois, puis reconvertir en un tuple. Cependant, lorsque j'utilise ces fonctions dans une partie différente du code, chacune d'elles agit comme si c'était la dernière dans la liste.Initialisation d'une liste de fonctions lambda en python
def newfuncs(data, funcs):
newfuncs = []
for f in funcs:
newf = lambda x: f(x, data)
newfuncs.append(newf)
return tuple(newfuncs)
Voici un exemple simple du problème
funcs = (lambda x, y: x + y, lambda a, b: a - b)
funcs = newfuncs(10, funcs)
print(funcs[0](5))
print(funcs[1](5))
J'attendre le numéro 15 à imprimer, puis -5. Cependant, ce code imprime le nombre -5 deux fois. Si quelqu'un peut m'aider à comprendre pourquoi cela se produit, ce serait grandement apprécié. Merci!
Side-note: Si vous êtes sur Python 3 et que vous utilisez l'approche d'argument par défaut, il est préférable de faire de tels arguments uniquement par mot-clé, donc passer des paramètres de position supplémentaires accidentellement ne remplace pas valeurs (vous ne pouvez les modifier qu'en passant explicitement le nom, 'f' dans ce cas, en tant qu'argument mot-clé). La seule différence est de changer 'lambda x, f = f:' en 'lambda x, *, f = f:', où le '*' (sans nom) fait tous les arguments après le mot-clé seulement. – ShadowRanger
@ShadowRanger Très bien, merci pour cela. –