Appel d'une fonction dans une autre fonction
Bonjour,
Je fais face à une fonction imbriquée dans une autre fonction. La fonction mère appelée constante_par_morceau prend deux paramètres : v et y. Au sein de cette fonction, on définit une autre fonction _fcn_wrapper qui prend en paramètre trois arguments : t, v et y.
J'aimerais savoir comment cette fonction est compilée et donne un résultat lorsqu'on l'exécute sachant qu'à aucun moment on ne définit t, que ce soit en dehors ou dans la fonction principale. Voici le code :
import numpy as np def f(x): return np.sin(2. * np.pi * x) + 2. * np.exp(-40. * (x-0.6) ** 2) def constante_par_morceau(v, y): ''' G = constante_par_morceaux(v, y) Retourne une fonction constante par morceau Entrées: v : liste des points de rupture Remarque: ils doivent être triés dans l'ordre croissant correspondant aux valeurs y Sortie: G une fonction qui prend soit des scalaires soit une liste de scalaires ''' def _fcn_wrapper(t, t0=v, v0=y): if type(t) in (list, np.ndarray,): # map() : apply a function to each item in an iterable (like a list or dictionary) return list(map(_fcn, t)) else: return _fcn(t) def _fcn(t, t0=v, y0=y): t0 = np.array(t0) #indice du point de rupture k = len(t0[t0 <= t]) - 1 if k >= 0: return y0[k] else: return 0. return _fcn_wrapper
Modération: merci de mettre en forme les extraits de code comme expliqué ici.
- Appel d'une fonction dans une autre fonction
- Fonction si et - Guide
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Fonction moyenne excel - Guide
- Appel privé - Guide
- Comment colorer une cellule excel en fonction du contenu d'une autre cellule - Forum Bureautique
1 réponse
Bonjour,
Afin de clarifier la question initiale
f n'est pas utileet on peut appeler constante_par_morceaux ainsi :
g = constante_par_morceau([0, 1, 2], [10, 20, 15]) print(g([0, 0.5, 1, 1.5, 2])) # [10, 10, 20, 20, 15]
Retour à la question
constante_par_morceau retourne une fonction, pas des valeurs. La fonction en question prend en paramètre un vecteur ou un scalaire t qui a ce stade n'est pas connu (il ne le sera qu'au moment d'appeler g, dans exemple [0, 0.5, 1, 1.5, 2].
Bonne chance