px普贤教程PuXian
普贤教程 › 基础教程

基础语法

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 会按官方风格整理,提交前跑一次即可。