普贤教程 › 参考手册
内建函数速查
按用途整理的内建函数。全部在本机 0.2.382 上实测可用;标注「编译轨」的只在 px build 的产物里可用。
输出与类型
函数 说明 示例
print(v)输出并换行 print("hi")
type(v)返回类型名字符串 type(1) → "int"
len(v)字符数 / 元素数 / 键数 len("中文") → 2
str(v)转字符串 str(3.0) → "3.0"
int(v)转整数(严格解析,截断小数) int("42")、int(3.9) → 3
float(v)转浮点 float("1.25")
字符串
函数 说明
split(s, sep)按分隔符拆成列表
join(sep, list)拼成字符串(分隔符在前 )
replace(s, old, new)替换全部
trim(s)去首尾空白
to_upper(s) / to_lower(s)大小写(不是 upper/lower)
contains(s, sub)是否包含
s.find(sub)首次出现下标,找不到 -1
列表与字典
写法 说明
sorted(list)返回新列表,不改原列表
xs.append(v)末尾追加
xs.pop()弹出末尾并返回
xs.index(v)值所在下标
xs.remove(v)删除值(返回真值表示删了)
xs.sort()原地排序
contains(xs, v)列表是否包含某值
d.keys() / d.values()键 / 值列表
d.has(k)键是否存在(缺键直接取值会报 R1008)
d.remove(k)删除键
数学
函数 说明
abs(n)绝对值
min(a, b) / min(list)最小值
max(a, b) / max(list)最大值
round(x)四舍五入,返回 float
floor(x) / ceil(x)向下 / 向上取整,返回 float
range(a, b[, step])整数序列,终点不含
时间
函数 说明
now_sec() / now_ms()秒 / 毫秒时间戳
now()本地时间字符串
time_format(sec, fmt)格式化(UTC )
文件与系统
函数 说明
read_file(path)读文本(二进制含 NUL 会截断)
read_file_opt(path)读文件,失败返回 Err
write_file(path, text)覆盖写入
append_file(path, text)追加
write_bytes(path, b)写二进制
exists(path)是否存在
open(path, mode) / close(fd)打开 / 关闭
read(fd, n)读 n 字节,返回 bytes
write(fd, data)写入
chmod(path, mode)改权限
env(k)环境变量,不存在返回 null
args()命令行参数,第 0 项是脚本名
hostname()主机名
exit(code)立即退出
sleep(ms)睡眠,单位毫秒
JSON
函数 说明
json_stringify(v)紧凑输出
json_parse_opt(s)解析,失败返回 Err(推荐 )
json_parse(s)解析,失败直接终止进程(慎用)
字节与编码
函数 说明
bytes(s) / bytes_to_str(b)字符串 ↔ 字节
bytes_len(b) / bytes_get(b, i)字节长度 / 取某字节
bytes_set(b, i, v)返回新 字节串(不可变)
base64_encode(s) / base64_decode(s)Base64 编解码
int_to_hex(n, width) / hex_to_int(s)十六进制转换
sha256(s) / sha1(s)摘要(十六进制字符串)
random_int(n)0 ≤ x < n 的随机整数
网络
函数 说明
http_get(url)返回响应体字符串
http_request(url, method, body[, headers])返回 {status, headers, body}
tls_connect(host, port, opts)TLS 连接(写 SMTP 之类的协议用)
并发(仅编译轨)
原语 说明
spawn f(args)启动并发执行单元
chan [T](n)带类型与缓冲的通道
ch.send (v) / ch.recv ()发送 / 接收(括号前有空格)
找不到某个函数时 先 grep -r "^def " /usr/share/puxian/stdlib/ 看标准库;再看 registry/ 下对应包。注意:本页只收录常用的一批,不是全集 (见下一节)。
内建到底有多少
0.2.382 注册的内建全局函数共 404 个 (不含 __ 前缀的内部名)。本页按用途列的是最常用的几十个,不是全集 。完整名单可以直接从运行时源码导出(RPM 自带 runtime/*.c):
sh 复制
grep -ohE 'px_set_global\("[a-zA-Z_][a-zA-Z0-9_]*" ' /usr/share/puxian/runtime/*.c \
| sed 's/px_set_global("//; s/" //' | grep -v '^__' | sort -u > /tmp/px-builtins.txt
wc -l < /tmp/px-builtins.txt # 404
怀疑某个函数有没有时,先查这张表——不要凭记忆,也不要因为本页没写就断定不存在。
进程与外部命令
os_exec 是 execve,不是「跑个子进程」 它用新程序替换当前进程 :调用之后本进程的代码不再执行,进程退出码就是被替换程序的退出码。第一次踩会表现为「打印完子进程输出,程序就静默结束了」。
px 复制
def main():
print("before" )
os_exec("sh" , ["-c" , "exit 7" ])
print("after" ) # 永远不执行
text 复制
before
(进程直接退出,rc=7 )
要抓子进程输出用 os_capture,返回 {rc, stdout, stderr},支持 timeout_ms(超时 rc=137)与 cwd:
px 复制
var r = os_capture("sh" , ["-c" , "echo out; echo err >&2; exit 3" ])
print(str(r["rc" ])) # 3
print(r["stdout" ]) # out
print(r["stderr" ]) # err
var t = os_capture("sh" , ["-c" , "sleep 5" ], {"timeout_ms" : 300 })
print(str(t["rc" ])) # 137(超时被杀)
进程族一共 14 个:os_exec os_spawn os_spawn_capture os_capture os_popen os_wait os_kill os_pid os_self_path os_errno os_rename os_remove_all os_file_sha256 os_random_hex。要并发跑多个子进程用 os_spawn 拿 pid,再 os_wait(pid) 收尸。
HTTP 服务端
语言自带 HTTP 服务端,不需要额外框架:
px 复制
def handler(req):
return {"status" : 200 , "headers" : {"Content-Type" : "text/plain" }, "body" : "hi " + req["path" ]}
def main():
http_serve(8080 , handler)
text 复制
$ curl -s http://127 .0 .0 .1 :8080 /abc
hi /abc
相关名字:http_serve http_serve_unix px_serve(静态文件)vhost route middleware basic_auth sse_serve tcp_listen udp_serve tls_server。
WebSocket
服务端 ws_serve(port, handler);客户端 ws_connect(url)。收发与心跳:ws_send ws_recv ws_broadcast ws_ping ws_heartbeat ws_close;连接信息 ws_conn_peer ws_conn_path ws_conn_header;流式与握手 ws_stream ws_reply_101 ws_connect_auto。
SQLite
px 复制
var db = sqlite_open("/tmp/t.db" )
sqlite_exec(db, "create table if not exists t(a int)" )
sqlite_exec(db, "insert into t values(?)" , [1 ])
var rows = sqlite_query(db, "select * from t" )
print(str(rows))
sqlite_close(db)
六个函数:sqlite_open sqlite_exec sqlite_query sqlite_escape sqlite_last_insert_rowid sqlite_close。注意 --min 会把 sqlite 裁掉(见工具链那章)。
对象存储 / 网络 / 图像 / HTTP/3
族 名字
对象存储(4) s3_get s3_put s3_list s3_delete
DNS / TCP / UDP / TLS dns_lookup dns_txt;tcp_listen tcp_connect 等 10 个;udp_serve udp_send 等 5 个;tls_connect tls_server 等 6 个
QUIC(27) quic_listen quic_accept quic_connect quic_open_stream quic_send quic_recv quic_migrate quic_h3_listen …
HTTP/3(38) h3_server_listen h3_serve_read_request h3_serve_send_response h3_client_connect h3_client_send_request h3_qs_open …
图像 img_decode img_encode_jpeg img_scale
会话 / 定时 / 事件 session_get session_set …;cron set_timeout set_interval;event_bus bus_publish bus_subscribe
系统 / 推理 / 扩展 mmap flock sandbox_enter ffi_call;onnx_model_open onnx_run
哪些要编译轨 http_serve / ws_* / sqlite_* / s3_* 在解释轨也能跑,但服务器类程序一律用 px build 出二进制再跑:解释轨的循环开销是编译轨的几百倍(见性能那章)。