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

运算符

运算符与主流语言基本一致,只有两处需要修正直觉:除法返回浮点,字符串拼接不接受数字。

算术运算

px
print(str(7 + 3))
print(str(7 - 3))
print(str(7 * 3))
print(str(7 / 3))
print(str(7 // 3))
print(str(7 % 3))
print(str(2 ** 10))
text
10
4
21
2.3333333333333335
2
1
1024
运算符含义注意
+加 / 字符串拼接 / 列表拼接类型必须相同
- *减 / 乘—
/除结果永远是 float
//整除结果 int
%取余—
**幂64 位溢出会回绕

比较运算

px
print(str(3 > 2))
print(str(3 >= 3))
print(str("abc" == "abc"))
print(str("abc" != "abd"))
print(str([1, 2] == [1, 2]))
text
true
true
true
true
true

字符串按字典序比较,< > 也适用:"apple" < "banana" 为 true。列表相等看逐项值,字典相等看键值对集合。

逻辑运算

px
var age = 20
var vip = true

print(str(age >= 18 and vip))
print(str(age < 18 or vip))
print(str(not vip))
text
true
true
false

and / or 短路求值:左边确定结果时右边不再执行。这条特性常被用来做空值保护:

px
def safe_len(x):
    if x == null:
        return 0
    return len(x)

print(str(safe_len(null)))
print(str(safe_len("abcd")))
text
0
4

位运算

px
print(str(0b1010 & 0b1100))
print(str(0b1010 | 0b1100))
print(str(0b1010 ^ 0b1100))
print(str(1 << 10))
print(str(1024 >> 4))
text
8
14
6
1024
64

位运算只接受 int。写协议解析、权限位、哈希处理时会用到;用 0b 字面量写二进制掩码,比十进制可读得多。

复合赋值

px
var n = 10
n += 5
n -= 3
n *= 2
n //= 4
print(str(n))
text
6

+= 对字符串是追加、对列表是拼接;n += 1 是最常见的计数器写法。

类型错误

px
print("计数:" + 3)
text
运行时错误: 错误 [R1002] 1:11: 无法相加: string + int

改成 print("计数:" + str(3))。这条规则换来的是:任何出现 + 的地方,两边类型都明确。

优先级速记

优先级运算符
最高**
↓* / // %
↓+ -
↓< > <= >= == !=
↓not
↓and
最低or
写法建议复杂条件加括号,别让人(和三个月后的自己)去查优先级表:if (a > 0 and b > 0) or force: 一眼就懂。