pyfunction
Encapsuler un handle de fonction Nelson en appelable Python.
📝Syntaxe
c = pyfunction(fun_handle)
📥Arguments d'entrée
Paramètre Description
fun_handle un handle de fonction : anonyme (par exemple @(x) x .^ 2) ou nommé (par exemple @sin).
📤Arguments de sortie
Paramètre Description
c un objet appelable Python (py.builtin_function_or_method) qui transmet ses appels au handle de fonction Nelson.
📄Description

c = pyfunction(fun_handle) encapsule un handle de fonction Nelson dans un objet appelable Python. Lorsque du code Python appelle c, le handle de fonction Nelson encapsulé est exécuté de manière synchrone dans la même session Nelson et son résultat est renvoyé à Python.

C'est le sens inverse de pyrun : au lieu que Nelson appelle Python, c'est Python qui appelle Nelson. Passez l'appelable à Python via les arguments nom-valeur de pyrun ou de pyrunfile, puis appelez-le depuis le code Python. Il peut être fourni à toute API Python attendant un appelable, par exemple un scoreur, un noyau ou un transformateur personnalisé de scikit-learn.

Lorsque Python appelle l'appelable encapsulé, les arguments positionnels sont convertis en valeurs Nelson (les scalaires Python et les tableaux NumPy suivent les mêmes règles que les autres conversions de python_engine), le handle de fonction Nelson est évalué, et sa sortie unique est reconvertie en objet Python. Les handles qui ne renvoient aucune valeur produisent None côté Python.

Une erreur Nelson levée dans le rappel devient une exception Python dont le message contient le message Nelson, puis elle est remontée proprement dans Nelson.

Limitations. Le rappel est intra-processus et mono-thread : le handle de fonction Nelson s'exécute toujours sur le thread de l'interpréteur Nelson. Il est conçu pour une utilisation mono-thread uniquement. Avec scikit-learn et joblib, utilisez n_jobs=1 ; les backends qui créent des processus ou des threads de travail (n_jobs supérieur à 1) ne peuvent pas rappeler la session Nelson parente, et un appel provenant d'un thread inattendu échoue avec une erreur claire au lieu de corrompre la session. Appeler à nouveau pyrun ou pyrunfile depuis un rappel n'est pas pris en charge et lève une erreur au lieu de provoquer un interblocage. Une seule sortie est prise en charge.

💡Exemples
Appeler un handle anonyme depuis Python.
sq = @(x) x .^ 2;
f = pyfunction(sq);
y = pyrun("r = g(4.0)", "r", "g", f)
Recevoir un tableau NumPy dans le rappel.
add1 = @(v) double(v) + 1;
f = pyfunction(add1);
o = pyrun("import numpy as np; o = g(np.array([1.0, 2.0, 3.0]))", "o", "g", f)
Utiliser un handle de fonction nommé.
f = pyfunction(@sin);
z = pyrun("r = g(0.0)", "r", "g", f)
🔗Voir aussi
pyrunpyrunfileAppeler Nelson depuis PythonTypes Python supportés
🕔Historique des versions
Version Description
2.0.0 version initiale
Modifier cette page sur GitHub