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

Call a python function with named parameter using python.net from a C# code

我想从 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

所以问题是,当我从 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 个带默认值的命名参数,包括另外两个没有默认值的参数。

已更新 我也试过:

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

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

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

参见readme

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

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