IronPython是Python編程語言的一種開源實現,它可以與.NET Framework框架緊密集成。IronPython可使用.NET Framework和Python標準類庫,而.NET語言也能夠很簡單地使用Python代碼。python
使用Visual Studio建立一個單元測試項目,添加Microsoft.CSharp.dll的引用,經過Nuget添加IronPython包,在項目中添加下面代碼,運行單元測試。編程
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UnitTestProjectIronPython { [TestClass] public class UnitTest1 { //基本用法 [TestMethod] public void TestMethod1() { //建立腳本引擎 var engine = IronPython.Hosting.Python.CreateEngine(); //編寫腳本 var pythonScript = "1+1"; //經過引擎執行腳本 var sum = engine.Execute<int>(pythonScript); //判斷c#中執行和IronPython中執行結果是否相等 Assert.AreEqual(1 + 1, sum); } //傳入變量 [TestMethod] public void TestMethod2() { //建立腳本引擎 var engine = IronPython.Hosting.Python.CreateEngine(); //經過引擎建立做用域 var scope = engine.CreateScope(); //建立變量 var a = 1; var b = 2; //在做用域中設置變量 scope.SetVariable("a", a); scope.SetVariable("b", b); //待執行腳本 var pythonScript = "a+b"; //經過引擎建立腳本源 var scriptSource = engine.CreateScriptSourceFromString(pythonScript); //在做用域上執行腳本源 var sum = scriptSource.Execute<int>(scope); //判斷c#中執行和IronPython中執行結果是否相等 Assert.AreEqual(a + b, sum); } //傳入函數 [TestMethod] public void TestMethod3() { //建立腳本引擎 var engine = IronPython.Hosting.Python.CreateEngine(); //經過引擎建立做用域 var scope = engine.CreateScope(); //建立函數 Func<int,int> fn = (i) => i * i; //在做用域中設置變量 scope.SetVariable("fn", fn); //待執行腳本 var pythonScript = "fn(4)"; //在做用域上執行腳本源 var scriptSource = engine.CreateScriptSourceFromString(pythonScript); //在做用域上執行腳本源 var result = scriptSource.Execute<int>(scope); //判斷c#中執行和IronPython中執行結果是否相等 Assert.AreEqual(fn(4), result); } //IronPython定義函數,.NET調用 [TestMethod] public void TestMethod4() { //建立腳本引擎 var engine = IronPython.Hosting.Python.CreateEngine(); //編寫腳本 var pythonScript = "lambda x:x*x"; //動態類型訪問python對象 dynamic result = engine.Execute(pythonScript); //判斷c#中執行和調用IronPython執行結果是否相等 Assert.AreEqual(4 * 4, result(4)); } //編譯運行 [TestMethod] public void TestMethod5() { //建立腳本引擎 var engine = IronPython.Hosting.Python.CreateEngine(); //經過引擎建立做用域 var scope = engine.CreateScope(); //建立函數 Func<int, int> fn = (i) => i * i; //在做用域中設置變量 scope.SetVariable("fn", fn); //待執行腳本 var pythonScript = "fn(4)"; //在做用域上執行腳本源 var scriptSource = engine.CreateScriptSourceFromString(pythonScript); //編譯腳本源 var compileCode = scriptSource.Compile(); //在做用域上執行腳本源 var result = compileCode.Execute<int>(scope); //判斷c#中執行和IronPython中執行結果是否相等 Assert.AreEqual(fn(4), result); } } }