普贤教程 › 基础教程
类型转换
转换函数不多,但有两条与别的语言不同的规则必须记住:数字到字符串必须显式转,字符串到数字是严格解析。
四个转换函数
| 函数 | 方向 | 示例 |
|---|---|---|
str(v) | 任意值 → string | str(42) → "42" |
int(v) | string / float → int | int("42") → 42,int(3.9) → 3 |
float(v) | string / int → float | float("1.25") → 1.25 |
bytes(s) / bytes_to_str(b) | string ↔ bytes | 按 UTF-8 编解码 |
数字转字符串
px
print("共 " + str(3) + " 项") print(str(3.0)) print(str(0.1 + 0.2))
text
共 3 项 3.0 0.30000000000000004
浮点保留 .0,不做"看起来像整数就省掉小数点"的优化——这对日志和序列化是好事,输出稳定可比对。但要注意浮点本身的精度:0.1 + 0.2 不等于 0.3,比较时用误差范围。
px
def feq(a, b): var d = a - b if d < 0: d = -d return d < 0.0000001 print(str(feq(0.1 + 0.2, 0.3)))
text
true字符串转数字:严格解析
px
print(str(int("42"))) print(str(int("-7"))) print(str(float("1.25")))
text
42 -7 1.25
畸形输入直接报错
这不是 Python 那种"能解析多少算多少"的宽容前缀解析。处理外部输入(表单、配置文件、请求参数)时,先校验再转换。
int("abc")、int("12abc") 都会终止程序:运行时错误: 错误 [R1002] 1:14: 无法将 'abc' 转为 int这不是 Python 那种"能解析多少算多少"的宽容前缀解析。处理外部输入(表单、配置文件、请求参数)时,先校验再转换。
px
def to_int(s): var t = trim(s) if len(t) == 0: return Err("空值") var i = 0 if t[0:1] == "-" or t[0:1] == "+": i = 1 if i >= len(t): return Err("不是数字:" + s) while i < len(t): var c = t[i:i + 1] if c < "0" or c > "9": return Err("不是数字:" + s) i += 1 return Ok(int(t)) print(str(to_int(" 42 ").ok())) print(str(to_int("4x2").is_err()))
text
42 true
浮点转整数是截断
px
print(str(int(3.9))) print(str(int(-3.9)))
text
3 -3
不是四舍五入,是直接砍掉小数部分。要四舍五入自己加 0.5 或用 round()(若当前版本提供,用 px lint 验证)。
字符串与字节
px
var s = "普贤" var b = bytes(s) print(str(len(s))) print(str(bytes_len(b))) print(bytes_to_str(b))
text
2 6 普贤
一个汉字在 UTF-8 里占 3 个字节。len() 数的是字符,bytes_len() 数的是字节——处理长度限制(比如数据库字段长度)时想清楚要哪一个。
常见转换组合
px
# 十六进制 print(int_to_hex(255, 2)) print(str(hex_to_int("ff")))
text
ff
255记住三条就够了① 拼接前先
str();② 外部输入先校验再 int();③ 字符数与字节数用不同的函数。