使用python.net从C#代码调用带有命名参数的python函数

时间:2017-03-09 14:15:46

标签: c# python .net python.net keyword-argument

我想用C#代码调用python函数。为此,我使用Python for .NET来调用函数,如以下代码行所示

   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

所以问题是,如何设置" raw"当我从C#代码调用analyze函数时,到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个带有默认值的命名参数,包括另外两个没有默认值的参数。

已更新 我也尝试过:

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

1 个答案:

答案 0 :(得分:3)

要应用关键字参数,请使用:

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

请参阅readme

另一种方法是使用添加到pythonnet的<{3}}的C#关键字参数语法:

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