Python 運算子
Python「運算子」除了和其它程式語言一樣有數學運算的「算術運算子」、將值指定給變數的「指定運算子」、比較數值字母大小的「比較運算子」、Boolean 運算的「邏輯運算子」和對「二進位」進行低階的位元操作,另外還有判斷「元素」是否為序列成員的 in、ont in「成員運算子」與判斷兩個「識別符」是否引用同一個物件的 is、is not 「身份運算子」。
「運算式」(Expression) 的組成,為一個「運算子」(Operator) 結合「運算元」(Operand),例如 1 + 2
這個「運算式」:
+
為「運算子」。1、2
為「運算元」。
算術運算子
提供數學 +
、-
、*
、/
運算,例如 1 + 2
。
運算子 | 說明 | 變數 | 運算 | 結果 | |
---|---|---|---|---|---|
a | b | ||||
+ |
加 | 3 | 2 | a + b |
5 |
- |
減法 | a - b |
1 | ||
* |
乘法 | a * b |
6 | ||
/ |
除法 | 9.0 | 2.0 | a / b |
4.5 |
// |
除法 (向下取整數) | a // b |
4.0 | ||
% |
取餘數 | 9 | 5 | a % b |
4 |
** |
次方 | 2 | 4 | a ** b |
16 |
範例程式:
print('3 + 2 = {}'.format(3 + 2))
'''
3 + 2 = 5
'''
print('3 - 2 = {}'.format(3 - 2))
'''
3 - 2 = 1
'''
print('3 * 2 = {}'.format(3 * 2))
'''
3 * 2 = 6
'''
print('9.0 / 2.0 = {}'.format(9.0 / 2.0))
'''
9.0 / 2.0 = 4.5
'''
print('9.0 // 2.0 = {}'.format(9.0 // 2.0))
'''
9.0 // 2.0 = 4.0
'''
print('9 % 5 = {}'.format(9 % 5))
'''
9 % 5 = 4
'''
print('2 ** 4 = {}'.format(2 ** 4))
'''
2 ** 4 = 16
'''
指定運算子
使用 =
來將值指定給變數,例如 a = 1 + 2
,還可以結合「算術運算子」。
運算子 | 例子 | 說明 |
---|---|---|
= |
a = b + c |
將 b + c 的運算結果給 a |
+= |
a += b |
等同 a = a + b |
-= |
a -= b |
等同 a = a - b |
*= |
a *= b |
等同 a = a * b |
/= |
a /= b |
等同 a = a / b |
%= |
a %= b |
等同 a = a % b |
**= |
a **= b |
等同 a = a ** b |
//= |
a //= b |
等同 a = a // a |
範例程式:
b = 5
c = 10
a = b + c
print('a = b + c a 值為 {}'.format(a))
'''
a = b + c a 的值為 15
'''
比較運算子
用來比較兩個「運算元」的數值或字母大小。
運算子 | 說明 | 運算
a = 5 ,
b = 20
|
結果 |
---|---|---|---|
== |
相等 | a == b |
False |
!= |
不相等 | a != b |
True |
> |
大於 | a > b |
False |
>= |
大於等於 | a >= b |
False |
< |
小於 | a < b |
True |
<= |
小於等於 | a <= b |
True |
範例程式:
a = 5
b = 10
print('a == b {}'.format(a == b))
print('a != b {}'.format(a != b))
print('a > b {}'.format(a > b))
print('a >= b {}'.format(a >= b))
print('a < b {}'.format(a < b))
print('a <= b {}'.format(a <= b))
'''
a == b False
a != b True
a > b False
a >= b False
a < b True
a <= b True
'''
邏輯運算子
用來執行「布林值」(Boolean) True
、False
的運算。
Python 沒有
&&
和 ||
這種形式的邏輯運算子 (有些程式語言同時支援兩種形式)。運算子 | 表達式 | 說明 |
---|---|---|
and |
a and b |
a、b 都為 True ,結果才為 True |
or |
a or b |
a、b 只要有一個為 True ,結果就為 True |
not |
not b |
反向,b 如果為 False ,結果就為 True |
範例程式:
a = 1
b = 5
boo = False
print('b > a and b > a : {}'.format(b > a and b > a))
print('a > b and b > a : {}'.format(a > b and b > a))
'''
b > a and b > a : True
a > b and b > a : False
'''
print('b > a or a > b : {}'.format(b > a or b > a))
print('b > a or b > a : {}'.format(b > a or b > a))
print('a > b or a > b : {}'.format(a > b or a > b))
'''
b > a or a > b : True
b > a or b > a : True
a > b or a > b : False
'''
print('not boo : {}'.format(not boo))
'''
not boo : True
'''
位元運算子
用來對「二進位」進行低階 (接近電腦,對人類較不易解讀) 的位元操作。
運算子 | 運算元數 | 說明 | 運算
a = 1001 b = 1100
|
結果 |
---|---|---|---|---|
&
|
2 | 兩個「運算元」的位元都為 1 時,結果為 1 |
a & b
|
1001 1100 ---- 1000 |
|
|
2 | 兩個「運算元」其中一個位元為 1 時,結果為 1 |
a | b
|
1001 1100 ---- 1101 |
^
|
2 | 兩個「運算元」的位元不同時,結果為 1 |
a ^ b
|
1001 1100 ---- 101 |
~
|
1 | 將「運算元」進行「二補數」運算 |
~a
|
01001 ----- 11010 |
<<
|
2 | 將左側「運算元」依右側設定的數量向左移 (「最低有效位」補 0) |
a << 2
|
1001 ------ 100100 |
>>
|
2 | 將左側「運算元」依右側設定的數量向右移 (「最高有效位」正值補 0、負值補 1,最低有效位丟棄) |
a >> 2
|
1001 ---- 10 |
範例程式:
a = 0b1001
b = 0b1100
print('a = {}'.format(bin(a)))
print('b = {}'.format(bin(b)), end = '\n--------------------\n')
print('a & b = {}'.format(bin(a & b)))
print('a | b = {}'.format(bin(a | b)))
print('a ^ b = {}'.format(bin(a ^ b)), end = '\n\n')
'''
a = 0b1001
b = 0b1100
--------------------
a & b = 0b1000
a | b = 0b1101
a ^ b = 0b 101
'''
print('a = {}'.format(bin(a)), end = '\n--------------------\n')
print('~a = {}'.format(bin(~a)))
print('a << 2 = {}'.format(bin(a << 2)))
print('a >> 2 = {}'.format(bin(a >> 2)))
'''
a = 0b1001
--------------------
~a = -0b1010
a << 2 = 0b100100
a >> 2 = 0b10
'''
二進位
更詳細「進位」說明可參考二、八、十與十六進位 (數字系統) 轉換教學
表示方式
Python 使用 0b
前綴 (prefix) 來表示這是「二進位」。
正、負數
「二進位」有正、負數稱為「有符號數」,表示將「最高有效位」用來表示正、負數:
0
正數:Python 省略最左邊的0
,例如0b1001
實際上是01001
。1
負數:Python 使用符號 - 表示負數,例如-0b1010
實際上是11010
。
補數
補數有兩種:
- 一補數 (ones’ complement):將原二進位「反相運算」(0 變 1;1 變 0),例如 1001 → 0110。
- 二補數 (2’s complement):「一補數」後再 + 1,例如 1001 → 0110 → 0111。
電腦所存放的是「二補數」,因此程式語言的補數一般也是使用「二補數」,它最大的優點是加、減法處理中,不用因正、負數值而使用不同的計算方式。
正數 to 負數運算
較偷懶作法可將原二進位直接 + 1
- 原二進位反轉 (「最高有效位」1 表示負數)。
- 再反轉,但「最高有效位」不變。
- 結果 + 1。
負數 to 正數運算
- 原二進位反轉 (「最高有效位」0 表示正數)。
- 結果 + 1。
- 再反轉,但「最高有效位」不變。
in、not in 成員運算子
用來判斷「元素」是否為序列 (String、List 或 Tuple) 的成員:
in
:是序列成員返回True
,否則返回False
。not in
:與上述in
相反。
範例程式:
a = 'A'
b = 2
list = [1, 2, 3]
print('a in list : {}'.format(a in list))
print('b in list : {}'.format(b in list))
'''
False
True
'''
print('a not in list : {}'.format(a not in list))
print('b not in list : {}'.format(b not in list))
'''
True
False
'''
is、is not 身份運算子
用來判斷兩個「識別符」是否引用同一個物件:
is
:引用自同一個物件返回True
,否則返回False
。is not
:與上述is
相反。
可以使用
id()
獲取物件的記憶體位址,來與「身份運算子」比對確認。範例程式:
a = 2
b = 2
print('id(a) : {}'.format(id(a)))
print('id(b) : {}'.format(id(b)))
print('a is b : {}'.format(a is b))
print('a is not b : {}'.format(a is not b))
'''
id(a) : 18528436
id(b) : 18528436
a is b : True
a is not b : False
'''
b = 3
print('id(a) : {}'.format(id(a)))
print('id(b) : {}'.format(id(b)))
print('a is b : {}'.format(a is b))
print('a is not b : {}'.format(a is not b))
'''
id(a) : 18528436
id(b) : 18528424
a is b : False
a is not b : True
'''
參考
本著作係採用創用 CC 姓名標示-相同方式分享 3.0 台灣 授權條款授權.