运算子 operator
在程序语言里,如果要进行“运算式”的计算,就必须要使用“算子 Operand”和“运算子 Operator”相搭配,算子表示的是需要计算的数值,运算子代表特定运算功能的符号,例如 3+4 里的 3 和 4 是算子,+ 号则是运算子,整串算式就是运算式,这篇教学会介绍 Python 里有哪些运算子。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
赋值运算子
“赋值运算子”就是“等号 =”,会将等号右边的结果 ( 值 ),指定 ( 赋予 ) 给等号左边的变数,下方的程序分别赋予 a、b、c 三个变数字串、数字和串列三种内容。
a = 'hello'
b = 123
c = [1,2,3]
算术运算子
“算术运算子”就是常见的“加减乘除”符号,针对数字进行数学式的运算 ( 如果要使用更多数学式,则需要 import math 模组 )。
比较需要注意的是,左边的变数是右边运算后的结果,和一般的数学式不太相同。
| 运算子 | 说明 | 范例 | 结果 |
|---|---|---|---|
| + | 加法 | a = 1+2 | a = 3 |
| - | 减法 | a = 20-12 | a = 8 |
| * | 乘法 | a = 2*3 | a = 6 |
| / | 除法 | a = 9/2 | a = 4.5 |
| // | 除法取整数 ( 无条件舍去 ) | a = 9//2 | a = 4 |
| % | 余数 | a = 9%2 | a = 1 |
| ** | 次方 | a = 2**3 | a = 8 |
使用算术运算子进行计算时,按照“先乘除后加减”的规则,并优先计算小括号刮起来的运算式。
a = 3*(3+2)
print(a) # 15
算术运算子和赋值往往搭配一起使用,进行变数的递增或递减效果。
a = 1 # a 賦值 1
a = a + 1 # a 賦值 1 + 1 ( 此時右邊的 a 等於 1 )
print(a) # 2
b = 5 # b 賦值 5
b = b - 1 # b 賦值 5 - 1 ( 此時右邊的 b 等於 5 )
print(b) # 4
如果需要“开根号”,可以使用“**0.5”来实现。
print(4**0.5) # 2.0
除了单纯的运算,也可以将算术运算子和赋值运算子组合,变成复合型态的运算子。
| 运算子 | 范例 | 等同于 |
|---|---|---|
| += | a += 1 | a = a + 1 |
| -= | a -= 1 | a = a - 1 |
| *= | a *= 2 | a = a * 2 |
| /= | a /= 2 | a = a / 2 |
| //= | a //= 3 | a = a // 3 |
| %= | a %= 3 | a = a % 3 |
| **= | a **= 2 | a = a ** 2 |
比较运算子
“比较运算子”是用来比较“两个值大小”的运算子,运算的结果只有 True 或是 False 两种,常用于逻辑判断使用。
注意,因为单一个等号“=”是“赋值运算子”,所以如果要进行相等的比较,必须使用两个等号“==”。
| 运算子 | 说明 | 范例 |
|---|---|---|
| > | 大于 ( a 是否大于 b ) | a > b |
| < | 小于 ( a 是否小于 b ) | a < b |
| >= | 大于等于 ( a 是否大于等于 b ) | a >= b |
| <= | 小于等于 ( a 是否小于等于 b ) | a <= b |
| == | 等于 ( a 是否等于 b ) | a == b |
| != | 不等于 ( a 是否不等于 b ) | a != b |
a = 5
b = 3
print(a < b) # False
print(b <= a) # True
print(a != b) # True
print(a == b) # False
逻辑运算子
“比较运算子”可以判断“and”( 且 )、“or”( 或 ) 和“not”( 非 ) 三种逻辑状态,运算的结果只有 True 或是 False 两种。
比较运算子可以使用 & 代替 and,| 代替 or。
and
当 a 是 True,b 也是 True,结果是 True,但只要 a、b 其中一个是 False,结果就是 False。
a = True b = False c = True print(a & b) # False print(a and b) # False print(a & c) # True print(a and c) # Trueor
只要 a、b 其中一个是 True,结果就是 True。
a = True b = False c = True print(a | b) # True print(a or b) # True print(a | c) # True print(a or c) # Truenot
如果 a 为 True,not a 的结果 False,如果 a 为 False,not a 的结果 True。
a = True b = False print(not a) # False print(not b) # True
逻辑运算子可以结合比较运算子,做出更复杂的逻辑判断。
a = 1
b = 2
c = 3
print((a>b)&(c>b)) # False
print((a>b)|(c>b)) # True
print(not ((a>b)&(c>b))) # True ( 因為 (a>b)&(c>b) 為 False )
in 与 is 运算子
如果有 a 和 b 两个变数,使用“in 运算子”可以判断 b 是否包含 a,使用“is 运算子”可以判断 a 和 b 是否为相同对象,如果判断包含或相同,回传 True,否则回传 False。
a = 2
b = 4
c = [1,2,3]
print(a in c) # True
print(b in c) # False
x = [1,2,3]
y = [1,2,3]
z = x
print(x is y) # False
print(x is z) # True
比特运算子
在程序语言的底层,所有数值都是以二进制表现 ( 0 和 1 ),“比特运算子”会针对每个数值的“二进制”字元进行比特运算,下面的表格使用 4 ( 二进制 0100 ) 和 5 ( 二进制 0101 ) 为例子。
| 运算子 | 说明 | 范例 | 结果 |
|---|---|---|---|
| & | 比特 且,二进制数字“完全相同”的部分,不同的部分以 0 取代。 | 4&5,使用 0100 和 0101 比较后,回传 0100 | 4 |
| | | 比特 或,二进制数字“只要有一个为 1 ”的部分都为 1。 | 4&5,使用 0100 和 0101 比较后,回传 0101 | 5 |
| ^ | 比特 互斥,二进制数字“完全相同”的部分都为 0,不同的部分以 1 取代。 | 4^5,使用 0100 和 0101 比较后,回传 0001 | 1 |
| ~ | 比特 相反,二进制数字 0 变成 1,1 变成 0 | ~4,0100 相反为 1011 | -5 |
| >> | 比特 右移,将二进制数字往右移动指定位数,左侧补 0 | 4>>2,0100 往右移动两位 0001 | 1 |
| << | 比特 左移,将二进制数字往左移动指定位数,右侧补 0 | 5<<2,0101 往左移动两位 10100 | 20 |
print(4&5) # 4
print(4|5) # 5
print(4^5) # 1
print(~4) # -5
print(4>>2) # 1
print(5<<2) # 20
跨列运算子
如果有遇到“算式过长,需要换行”的程序码或运算式,除了使用小括号包覆使其换行计算,也能使用“反斜线 \”放在一列的最后方,就可以将程序码进行换列,注意,使用跨列运算子后不得加上空格或其它字元,下方的例子执行后,a 和 b 的结果会是相同的。
a = ( 1 + 2 + 3 +
4 + 5 + 6 +
7 + 8 + 9 )
b = 1 + 2 + 3 + \
4 + 5 + 6 + \
7 + 8 + 9
微信扫码关注
抖音扫码关注