基于AScript的python3脚本语言发布啦!

AScript是一个开源的C#动态脚本解析执行引擎,支持扩展多种脚本语言,今天(2026年5月4日)正式发布了python3语言AScript.Lang.Python3的第1个版本0.0.1,快来试试吧!

一、介绍

支持python3基础语法、数据类型(int/float/bool/str/list/set/dict)、函数定义,以及列表、集合、字典操作。

二、安装

复制代码
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));

10、列表推导式

复制代码
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]);

11、lambda

复制代码
1 string s = @"
2 f = lambda a,b: a+b
3 f(10,20)
4 ";
5 var script = new Script();
6 script.Context.Langs = new[] { "python3" };
7 Assert.AreEqual(30L, script.Eval(s));

12、类型注解

指定变量类型及函数返回值类型。

复制代码
 1 var s = @"
 2 @lang python3
 3 def sum(a:int,b:int)->int:
 4     return a+b
 5 m:int=10
 6 n:int=20
 7 sum(m,n)
 8 ";
 9 var script = new Script();
10 Assert.AreEqual(30L, script.Eval(s));

四、结束语

python3语法是参考https://www.runoob.com/python3/python3-tutorial.html教程来实现的,欢迎大家一起交流学习!


AScript开源地址:https://gitee.com/rockey627/AScript

相关推荐
青少儿编程课堂13 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
灿飞屋2 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
一晌小贪欢4 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚4 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机5 小时前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_6 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰6 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain
卷无止境6 小时前
百万 token 时代的真相:主流大模型上下文窗口与最大输出的横向对比分析
人工智能·python
用户298698530146 小时前
Python 实战:将 HTML 批量转换为 Markdown
python·html·markdown
hhcgchpspk7 小时前
flask服务端页面预防被爬措施
后端·python·flask·网络爬虫·防爬