安装
1 install-package AScript 2 install-package AScript.Lang.Python3
三、使用说明
1、注册语言
1 Script.Langs.Set("python3", Python3Lang.Instance); 2 // 可全局设置为默认语言 3 // Script.Langs.Set("python3", Python3Lang.Instance, setDefault: true);2、上下文中指定语言
如果已全局设置默认语言则无需指定。
1 var script = new Script(); 2 script.Context.Langs = new [] { "python3" }; 3 var s = @" 4 def sum(a,b): 5 return a+b 6 sum(10,20) 7 "; 8 Assert.AreEqual(30L, script.Eval(s));3、使用@lang指定语言
1 var s = @" 2 // 默认csharp语言 3 int mult(int a, int b) => a*b; 4 // 嵌入python3语言 5 @lang python3 6 def sum(a,b): 7 return a+b 8 @end 9 int m = 10; 10 int n = 20; 11 mult(m, n) + sum(m, n); 12 "; 13 var script = new Script(); 14 Assert.AreEqual(230, script.Eval(s));
4、字符串插值
1 string s = @" 2 name='tom'; 3 f'hello {name}, 5+8={5+8}' 4 "; 5 var script = new Script(); 6 script.Context.Langs = new [] { "python3" }; 7 Assert.AreEqual("hello tom, 5+8=13", script.Eval(s));5、字符串索引和截取
1 var script = new Script(); 2 script.Context.Langs = new [] { "python3" }; 3 Assert.AreEqual("e", script.Eval("'hello'[1]")); 4 Assert.AreEqual("e", script.Eval("'hello'[-4]")); 5 Assert.AreEqual("ell", script.Eval("'hello'[1:4]")); 6 Assert.AreEqual("ell", script.Eval("'hello'[-4:-1]"));6、列表
1 var s = @" 2 list1 = [1,2,3] 3 list2 = [3,4,5] 4 list3=list1 + list2 5 "; 6 var script = new Script(); 7 script.Context.Langs = new[] { "python3" }; 8 var result = script.Eval<List<object>>(s); 9 Assert.AreEqual("1,2,3,3,4,5", string.Join(',', result)); 10 Assert.AreEqual(2L, script.Eval("list3[1]")); 11 Assert.AreEqual(2L, script.Eval("list3[-5]"));7、集合
集合元素是去重的。
1 var script = new Script(); 2 script.Context.Langs = new[] { "python3" }; 3 var set = (HashSet<object>)script.Eval(@" 4 s = {1, 2, 2} 5 s.add(3) 6 s.add(2) 7 s 8 "); 9 Assert.AreEqual("1,2,3", string.Join(',', set));8、字典
1 var s = @" 2 p = {'name': '张三', 'age': 18} 3 p['age']=20 4 p 5 "; 6 var script = new Script(); 7 script.Context.Langs = new [] { "python3" }; 8 var dict = script.Eval<Dictionary<object, object>>(s); 9 Assert.AreEqual(2, dict.Count); 10 Assert.AreEqual("张三", dict["name"]); 11 Assert.AreEqual(20L, dict["age"]);9、for遍历值
1 var code = @" 2 total = 0 3 for x in [1, 2, 3]: 4 total += x 5 total 6 "; 7 var script = new Script(); 8 script.Context.Langs = new[] { "python3" }; 9 Assert.AreEqual(6L, script.Eval(code));10、for遍历值和索引
1 var code = @" 2 result = '' 3 for i, x in enumerate([1, 2, 3]): 4 result += f'{i}:{x},' 5 result 6 "; 7 var script = new Script(); 8 script.Context.Langs = new[] { "python3" }; 9 Assert.AreEqual("0:1,1:2,2:3,", script.Eval(code));11、列表推导式
1 var code = @"[x * 2 for x in [1, 2, 3]]"; 2 var script = new Script(); 3 script.Context.Langs = new[] { "python3" }; 4 var list = (List<object>)script.Eval(code); 5 Assert.AreEqual(3, list.Count); 6 Assert.AreEqual(2L, list[0]); 7 Assert.AreEqual(4L, list[1]); 8 Assert.AreEqual(6L, list[2]);