普贤教程 › 基础教程
基础语法
PuXian 用缩进表达代码块,语句之间用换行分隔。规则很少,但每一条都会被严格执行——猜错一条就会得到 E2001 语法错误。
缩进
凡是代码块的开始(def、if、while、for)都以冒号结尾,下一行起缩进一级。约定用 4 个空格。
px
def main(): var n = 3 if n > 0: print("正数") print("还在同一层") print("回到第一层")
不要混用 Tab 和空格同一个文件里混用会让缩进层级对不上,报错位置通常还指向"看起来没问题"的那一行。编辑器设为「Tab 转 4 空格」最省事。
语句与行
- 一条语句一行,不需要分号。
- 空行会被忽略,可以用来分隔逻辑段落。
- 没有隐式续行,也没有行尾续行符——长表达式请用括号或拆成多步。
注释
px
# 单行注释 ## 文件头习惯用 ## 写文档注释 def add(a, b): return a + b # 行尾也可以
标识符与保留字
标识符由字母、数字、下划线组成,不能以数字开头。中文可以用(UTF-8 源码),但工程代码建议用英文。
以下词不能作为变量名或函数名——用了会得到「期望变量名」的语法错误:
| 类别 | 保留字 |
|---|---|
| 声明 | def var let |
| 分支循环 | if elif else while for in break continue return |
| 逻辑 | and or not true false null |
| 模块 | import |
| 函数与并发 | fn spawn chan |
两个最容易撞的
换成
from 和 in 都是保留字。写邮件功能时把发件人变量命名为 from,会得到:2:9: 语法错误 E2001: 期望变量名,实际得到 from换成
sender 就好。语句块与作用域
函数是唯一的作用域边界。函数内部声明的变量在函数外不可见;顶层声明的变量在函数内可读。
px
var greeting = "你好" def show(): var name = "普贤" print(greeting + "," + name) show() print(greeting)
text
你好,普贤 你好
把 print(name) 写到函数外面,会得到运行时错误「未定义变量: name」。
表达式与运算符优先级
优先级与数学直觉一致:** > 一元 - > * / // % > + - > 比较 > not > and > or。拿不准就加括号,可读性优先。
一行写完的写法
简单分支可以直接写在冒号后面,解析器接受:
px
def sign(n): if n > 0: return 1 elif n < 0: return -1 else: return 0 print(str(sign(-5)))
text
-1风格建议项目里统一用「冒号换行 + 缩进」,不要为了省行写成一行;
px fmt -w 会按官方风格整理,提交前跑一次即可。