2017-09-27 5 views
-1

Je veux écrire une fonction (function_A) pour optimiser les paramètres d'une autre fonction (function_B) par itération. La fonction dont les paramètres à optimiser est:Comment référencer une variable de fonction en tant que paramètre d'une autre fonction?

def function_B(a=10, b=12, c=14, d= 18): 
    value = (...) 
    return value 

Maintenant, je veux trouver les combinaisons de paramètres a, b, c, d qui optimiser les résultats en fonction de certains critères. Alors j'écris la fonction suivante - par exemple - l'utilisateur peut spécifier le paramètre à optimiser, dans ce cas, nous choisissons d'optimiser le paramètre a:

def function_A(variable = a, min = 10, max = 20): 

    value = np.zeros((max - min + 1)) # initialize an empty vector to store results 
    count = 0 

    for i in np.linspace(1, 20, 20, endpoint=True): 
     ans = function_B(variable = i) 
     value[count] = ans 
     count = count + 1 

    return value 

Le problème est, je ne sais pas comment spécifier dans afunction_A. J'ai essayé d'utiliser:

function_A(variable = a, ...)

function_A(variable = 'a', ...)

mais ne travaille ... comment spécifier 'a' est le paramètre que je veux itérer?

Répondre

1

Voici un exemple très simplifié:

def A(a=5, b=4): 
    return a, b 

def B(var): 
    x = {var:'numberyouwant'} 
    return A(**x) 

Donc dans votre cas passer la variable sous forme de chaîne et passer cela en une dictonary et enfin à l'aide mise à jour variables keyworded votre fonction avec le paremeter que vous souhaitez optimiser.

def function_A(variable = 'a', min = 10, max = 20): 

    value = np.zeros((max - min + 1)) # initialize an empty vector to store results 
    count = 0 

    for i in np.linspace(1, 20, 20, endpoint=True): 
     temp_dict = {variable: i} 
     ans = function_B(**temp_dict) 
     value[count] = ans 
     count = count + 1 

return value 
+0

Merci, mais je ne comprends toujours pas .. J'ai essayé le code suivant comme un exemple simple, et a obtenu msg erreur. pourriez-vous me montrer où je me suis trompé? – user7269791

+0

'def A (a = 1, b = 2): return a + b' et ' def B (var = 'a', min = 10): temp_dict = {var: min} ans = A (var) return ans' alors je l'ai testé 'B (var = 'b')' et j'ai obtenu l'erreur msg _TypeError: impossible de concaténer 'str' et 'int' objects_ – user7269791