2017-04-10 1 views
1

J'ai une fonction - func_main - qui a plusieurs entrées. L'une des entrées est une autre fonction - func_mini. La plus petite fonction, func_mini, charge certaines données et doit pouvoir charger des données provenant de sources différentes en fonction des arguments qui lui sont transmis. Le problème est que je suis en train de lire la documentation sur func_main et il dit qu'il n'accepte que des fonctions sans paramètre. Comment puis-je contourner cela?Python: Comment passer des paramètres quand ce n'est pas une option?

Par exemple:

def func_main(evaluator = None): 

    num_list = [1,2,3] 
    return evaluator(num_list) 



def func_mini(data_source = None): 

    if not data_source: 
     data_source = config.DATA_SOURCE 

    return pandas.read_csv(data_source).min 

Je veux faire ceci:

func_main(func_mini(data_souce='path/to/my/file')) 

Mais la documentation func_main dit:

« évaluateur: Une fonction sans paramètre qui définit et retourner toutes les données nécessaires la définition du modèle ci-dessus. "

+1

Donc, vous voulez créer une fonction dynamique, c'est lié à certaines valeurs de paramètres que vous créez? –

+0

Oui, je pense que Timgeb a frappé le clou sur la tête. – user1367204

Répondre

6

Vous pouvez utiliser functools.partial pour créer une fonction sans paramètres à partir de la fonction func_mini d'origine. Démo:

>>> from functools import partial 
>>> def foo(x): 
...  print(x) 
... 
>>> foo_argless = partial(foo, 'hi') 
>>> foo_argless() 
hi