Supposons que j'ai une fonction qui prend deux arguments et effectue un calcul sur eux :
def add(a, b):
return a + b
Je veux appeler cette fonction via une bibliothèque de multiprocessing qui ne peut gérer que des fonctions avec un seul argument. Ainsi, je modifie la fonction pour prendre son argument sous forme d'un seul tuple :
def add2(ab):
a, b = ab
return a + b
Cependant, cela me semble maladroit. Les variables doivent essentiellement être définies (et documentées) deux fois. Si j'utilisais une fonction lambda, je pourrais simplement écrire ce qui suit et elle accepterait correctement le tuple :
add3 = lambda (a, b): a + b
Malheureusement, ma fonction n'est pas assez simple pour être implémentée en tant que fonction lambda. Y a-t-il une sorte de fonctionnalité de sucre syntaxique en python qui me permettrait d'écrire une fonction nommée qui accepte un tuple mais traite chaque composant de ce tuple comme un argument nommé séparé ? Mes tentatives de recherche de solutions à ce problème ont principalement donné des références à l'opérateur *args
, mais cela ne s'applique pas ici car je ne contrôle pas le site où la fonction est appelée.
Voici un exemple de la façon dont la fonction est appelée. Notez qu'elle est appelée via la bibliothèque de multiprocessing donc je ne peux pas passer plus d'un argument :
import multiprocessing
pool = multiprocessing.Pool(processes=4)
for result in pool.imap_unordered(add, [(1,2),(3,4)]):
print(result)
Les réponses pour python 2.7 ou 3.x sont les bienvenues.