JianPy for VS Code
JianPy(简 Python)是面向中文开发者设计的 Python 方言,本插件为 VS Code 提供完整的 JianPy 语言支持。
简介
JianPy 的核心理念是:保留 Python 全部运行时语义,仅对声明层关键词进行中文化/拼音化,并用大括号 {} 替代缩进。
编译器开发者:时空系
公式:JianPy = Python 语义 + 声明层拼音关键词 + 大括号 {} + 入口()
使用 JianPy,你可以用中文思维写代码,同时无缝使用 NumPy、Pandas、PyTorch、FastAPI 等整个 Python 生态。
插件功能
- 语法高亮:为
.jpy 文件提供完整的 JianPy 关键词、字符串、注释等高亮。
- 实时诊断:编写时即时提示语法错误、未定义变量、常量重复赋值等问题。
- 自动补全:基于语义分析提供关键词、变量、函数等补全建议。
- 习惯检测:检测到 Python 风格写法(如写
for / while)时提示使用 JianPy 关键词。
- 编译集成:可调用
jian_py 编译器将 .jpy 文件转换为标准 .py 文件。
快速开始
安装本插件。
新建一个扩展名为 .jpy 的文件,例如 hello.jpy。
写入以下代码:
gn 入口() {
shu name = input("请输入你的名字: ")
print(f"你好, {name}!")
}
使用 jian_py hello.jpy 编译生成 hello.py,或直接运行。
配置说明
本插件已内置 jian_py.exe 编译器,安装后通常无需额外配置即可编译运行 .jpy 文件。
功能与依赖
| 功能 |
本地 |
服务端 |
| JianPy 编译运行 |
✅ 优先使用插件自带的 compiler/jian_py.exe |
❌ 不走服务端 |
| 语法诊断 |
✅ 优先使用插件自带编译器 |
✅ 本地不可用时走 /api/check-jian |
| Python → JianPy 转换 |
❌ 不支持本地 |
✅ 仅走 /api/py-to-jian |
自定义本地编译器路径(可选)
如果插件自带的编译器版本不符合需求,可以手动指定:
打开 VS Code 设置:Ctrl + ,
搜索 jian jianPyPath
填入你的 jian_py.exe 路径,例如:
D:\jianWeb\jian_py.exe
完整配置示例:
{
"jian.jianPyPath": "D:\\jianWeb\\jian_py.exe",
"jian.serverUrl": "http://jianpy.yuelonghui.cn"
}
核心语法速查
关键词对照表
| Python |
JianPy |
说明 |
def |
gn |
函数定义,取自"功能" |
class |
sjgnbao |
类定义,取自"数据功能包" |
=(变量赋值) |
shu + = |
可变变量声明,取自"数据" |
| 常量约定 |
chang |
编译时只读常量 |
return |
fanhui |
函数返回 |
self |
ben |
当前实例 |
__init__ |
chushi |
构造函数 |
super() |
fuji |
调用父类 |
import |
引入 |
模块引入 |
from ... import |
从 ... 引入 |
从模块引入 |
as |
xinming |
别名 |
__all__ |
引出 |
模块导出 |
for |
zhuge |
迭代循环,取自"逐个" |
while |
zhiyao |
条件循环,取自"只要" |
match |
pifen |
结构模式匹配 |
case |
qingkuang |
模式匹配分支 |
try |
changshi |
异常捕获 |
except |
buhuo |
异常捕获 |
finally |
zuizong |
异常最终块 |
raise |
paochu |
抛出异常 |
with |
tuoguan |
上下文管理器 |
async |
后台 |
异步函数 |
await |
等 |
等待异步结果 |
yield |
zanting |
生成器暂停 |
lambda |
匿名函数 |
匿名函数 |
pass |
hulue |
空操作 |
保持不变的 Python 原生写法
以下内容完全保持英文,与 Python 一致:
- 控制流:
if、elif、else、break、continue
- 逻辑运算符:
and、or、not
- 布尔与空值:
True、False、None
- 类型注解:
int、str、float、bool、list、dict、tuple、set、type
- 所有运算符:
+ - * / // % ** @ == != < > <= >= in is
- 数据字面量:
123、"hello"、[1, 2, 3]、{"a": 1}、(1, 2)
- f-string:
f"Hello, {name}"
- 装饰器:
@decorator
大括号替代缩进
# Python 风格(缩进敏感)
def greet(name):
if name:
print(f"Hello, {name}")
else:
print("Hello, world")
# JianPy 风格(大括号)
gn greet(name) {
if (name) {
print(f"Hello, {name}")
} else {
print("Hello, world")
}
}
变量与常量
shu count = 0
shu name = "张三"
shu age: int = 18
shu (x, y) = (10, 20)
chang MAX_SIZE = 100 # 常量,不可重新赋值
函数
gn add(a, b) {
fanhui a + b
}
gn greet(name: str, age: int) str {
fanhui f"你好,{name},你今年{age}岁"
}
gn sum_all(*numbers) {
shu total = 0
zhuge (num in numbers) {
total += num
}
fanhui total
}
类与面向对象
sjgnbao Person {
gn chushi(ben, name, age) {
ben.name = name
ben.age = age
}
gn greet(ben) {
fanhui f"你好,我是{ben.name},今年{ben.age}岁"
}
}
sjgnbao Student(Person) {
gn chushi(ben, name, age, school) {
fuji.chushi(name, age)
ben.school = school
}
}
循环
# 逐个遍历
zhuge (fruit in ["苹果", "香蕉", "橙子"]) {
print(fruit)
}
# 只要条件成立
zhiyao (count < 5) {
print(count)
count += 1
}
# 循环 else
zhuge (i in range(3)) {
print(i)
} else {
print("循环正常结束")
}
模块引入
引入 math
引入 json xinming json_parser
从 datetime 引入 datetime, timedelta
从 os.path 引入 join
从 .engine 引入 Value
# 公开接口
引出 gn public_function() {
fanhui "这是公开函数"
}
异常处理
changshi {
shu result = 10 / int(input("输入数字: "))
print(f"结果: {result}")
} buhuo (ZeroDivisionError) {
print("错误: 不能除以零")
} buhuo (ValueError) {
print("错误: 请输入有效的数字")
} zuizong {
print("程序执行完毕")
}
结构模式匹配
pifen 消息 {
qingkuang {"类型": "文本", "内容": 内容}:
print(f"收到文本: {内容}")
qingkuang {"类型": "图片", "地址": 地址}:
print(f"加载图片: {地址}")
qingkuang _:
print("未知消息")
}
推导式
shu squares = [x**2 zhuge x in range(10)]
shu evens = [x zhuge x in range(20) if x % 2 == 0]
shu square_dict = {x: x**2 zhuge x in range(5)}
shu total = sum(p.numel() zhuge p in parameters)
入口函数
每个 JianPy 程序使用 gn 入口() 作为统一入口:
gn 入口() {
print("Hello, JianPy!")
}
编译为 Python:
def main():
print("Hello, JianPy!")
if __name__ == "__main__":
main()
完整示例
从 datetime 引入 datetime
引入 json
type User = dict[str, str | int | None]
sjgnbao UserManager {
gn chushi(ben) {
ben._users: list[User] = []
}
gn add_user(ben, name: str, age: int) {
shu user: User = {
"name": name,
"age": age,
"created_at": datetime.now().isoformat()
}
ben._users.append(user)
print(f"用户 {name} 已添加")
}
gn to_json(ben) str {
fanhui json.dumps(ben._users, ensure_ascii=False, indent=2)
}
}
gn 入口() {
shu manager = UserManager()
manager.add_user("张三", 25)
manager.add_user("李四", 30)
print(manager.to_json())
}
了解更多
- JianPy 语法规范:
jian_py/jpy语法规范.md
- JianPy 编译器设计说明:
JianPy编译器设计说明书.md