2017-03-09 157 views
3

我想从C#代码中调用python函数。要做到这一点,我用的Python .NET调用功能,如图下面的代码行从C#代码中使用python.net调用具有命名参数的python函数

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); 
      } 
     } 
    } 

Python函数是这样的:

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

所以现在的问题是,如何能当我从C#代码调用分析函数时,我将“raw”设置为False。我尝试了以下,但它没有奏效。

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

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

我知道这是很容易通过这样做:

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

但是如果有超过六七命名的参数,它不会是巨大的,手动将其完全与变革我想要的那个。例如,我正在使用的python库有12个具有默认值的named参数,其中包含两个没有默认值的参数。

更新 我也试过:

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

如果我没有记错语法应'原始= FALSE',等于操作员而不是分号,有你试过了吗? 'dynamic result = lb.analyze(“SomeSource”,raw = false);' – ironstone13

+0

@ ironstone13是的,但是C#编译器向我展示了一个编译错误。 – ash

回答

3

申请关键字参数使用:

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

readme

另一种方法是使用被recently加到pythonnet C#关键字参数的语法:

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

+0

谢谢!有效。 – ash

相关问题