2017-03-09 70 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