在C#环境中动态调用IronPython脚本(2)

上面代码中,python中有两个函数和一个类,第一个函数的参数是简单数据类型,第二个是复杂数据类型(关于两个环境下复杂数据类型的对应,下面将论述)。无论是类还是函数,C#的调用方法都是通过ScriptScope.GetVariable,它的函数定义如下:

T GetVariable<T>(string name);

ScriptScope还有一个更“安全”的方法

boolTryGetVariable<T>(string name, out T value);

可以完成相似的操作。

这个例子,可以扩展C#的应用,例如,python有丰富的数学计算库,而C#在这方面较欠缺,这时,就可以采用上面的方式,计算部分采用现成的python库,而主控程序采用C#编制。

三、在Python环境中调用C#环境函数

现在看第三个例子,如果Python运行逻辑复杂,需要在运行过程中调用C#函数怎么办?

public static void test3()           {               var engine = Python.CreateEngine();               var scope = engine.CreateScope();                  scope.SetVariable("my_object_model"new CSharpClass ());               string pythonscript =                   "def fun(arg1):\n" +                   "   result = arg1+1\n" +                   "   return result\n" +                   "adder = fun(5) + my_object_model.Foo(2)\n" ;                engine.CreateScriptSourceFromString(pythonscript).Execute(scope);                Console.WriteLine(scope.GetVariable("adder"));           }   Class CSharpClass   {           public int Foo(int arg)           {              return  arg +1;           }   }  

这个例子中,创建CShparpClass类,并将其作为“变量”传到Python环境中,在Python中就可以调用了。注意到C#中的类名可以和Python中不一样。


四、在Python环境中动态调用C#库

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwgdgp.html