在 Silverlight 中如何执行 IronPython 代码
假设我已经有一个 .py 文件,文件名为 script.py,它可能包含如下代码:
1 def factorial(n):
2 "factorial(n) -> returns factorial of n"
3 if n <= 1: return 1
4 return n * factorial(n-1)
5
6 def welcome(name):
7 return "Hello " + name
2 "factorial(n) -> returns factorial of n"
3 if n <= 1: return 1
4 return n * factorial(n-1)
5
6 def welcome(name):
7 return "Hello " + name
现在我想在 Silverlight 程序中调用 script.py 文件中的 factorial() 函数。那么我们可以通过以下代码来实现:
[方法一]
1using Silverlight = Microsoft.Scripting.Silverlight;
2...
3var runtime = Silverlight.DynamicEngine.CreateRuntime();
4var python = runtime.GetEngine("python");
5dynamic script = runtime.UseFile("script.py");
6int p = script.factorial(5);
7tbkResult.Text = p.ToString();
8...
[方法二]
1 using Silverlight = Microsoft.Scripting.Silverlight;
2 using Microsoft.Scripting.Hosting;
3 ...
4 ScriptRuntime runtime = Silverlight.DynamicEngine.CreateRuntime();
5 ScriptEngine python = runtime.GetEngine("python");
6 ScriptScope script = runtime.UseFile("script.py");
7 Func<int, int> factorial = script.GetVariable<Func<int, int>>("factorial");
8 tbkResult.Text = factorial(5).ToString();
9 ...
2 using Microsoft.Scripting.Hosting;
3 ...
4 ScriptRuntime runtime = Silverlight.DynamicEngine.CreateRuntime();
5 ScriptEngine python = runtime.GetEngine("python");
6 ScriptScope script = runtime.UseFile("script.py");
7 Func<int, int> factorial = script.GetVariable<Func<int, int>>("factorial");
8 tbkResult.Text = factorial(5).ToString();
9 ...
不过要想使程序正常运行,必须先添加以下引用:
IronPython.dll
IronPython.Modules.dll
Microsoft.Dynamic.dll
Microsoft.Scripting.Debugging.dll
Microsoft.Scripting.dll
Microsoft.Scripting.Silverlight.dll
Microsoft.CSharp.dll (要想成功使用 dyanmic 关键字,必须添加该引用)
当然这里面还要注意 script.py 文件的存放路径。
浙公网安备 33010602011771号