普贤教程 › 基础教程
运算符
运算符与主流语言基本一致,只有两处需要修正直觉:除法返回浮点,字符串拼接不接受数字。
算术运算
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: 一眼就懂。