2017-03-09 4 views
3

Je souhaite appeler une fonction python à partir du code C#. Pour ce faire, je Python pour fonction d'appeler .NET comme indiqué dans les lignes suivantes de codeAppel d'une fonction python avec un paramètre nommé utilisant python.net à partir d'un code C#

using System; 
    using Python.Runtime; 

    public class Test{ 
     public static void Main(){ 
      using(Py.GIL()){ 
       dynamic lb = Py.Import("lb"); 
       dynamic result = lb.analyze("SomeValue"); 

       Console.WriteLine(result); 
      } 
     } 
    } 

La fonction python est quelque chose comme ceci:

def analyze(source, printout = False, raw = True): 
     # removed for bravity 

La question est, comment J'ai mis "raw" à False quand j'appelle la fonction d'analyse du code C#. J'ai essayé le suivant mais cela n'a pas fonctionné.

1. dynamic result = lb.analyze("SomeSource", raw : false); // No result 

2. dynamic result = lb.analyze("SomeSource", @"raw = False"); // No result 

Je sais qu'il est facile de le faire en faisant ceci:

dynamic result = lb.analyze("SomeSource", False, False); 

Mais s'il y a plus de six ou sept paramètre nommé, il ne serait pas génial d'insérer tout manuellement et le changement celui que je voulais. Par exemple, la bibliothèque python que j'utilise possède 12 paramètres nommés avec une valeur par défaut incluant deux autres paramètres sans valeur par défaut.

MIS À JOUR J'ai aussi essayé:

3. dynamic result = lb.analyze("SomeSource", raw = false); // C# compilation error 
+0

Si je ne me trompe pas la syntaxe doit être 'raw = false', opérateur égal au lieu de virgule, ont vous avez essayé ça? 'résultat dynamique = lb.analyze (" SomeSource ", raw = false);' – ironstone13

+0

@ ironstone13 oui je l'ai fait, mais le compilateur C# m'a montré une erreur de compilation. – ash

Répondre

3

Pour appliquer des arguments utilisez des mots clés:

lb.analyze("SomeSource", Py.kw("raw", false));

Voir readme.

Une autre approche utilise C# syntaxe argument mot-clé qui a été recently ajouté à pythonnet:

lb.analyze("SomeSource", raw: false);

+0

Merci! Ça a marché. – ash