python 學習(五)- 運算子
運算子
一、算術運算子
算術運算子即數學運算子,例如加減乘除,python 中除了支援加減乘除以外,還支援整除、取餘、冪運算:
a = 1
b = 2
# 加
print(a + b)
# 減
print(b - a)
# 乘
print(a * b)
# 除
print(b / a)
# 整除
print(b // a)
# 取餘
print(b % a)
# 冪運算
print(b ** a)
二、賦值運算子
= 是最基本的賦值運算子,用來將一個表示式的值賦給另一個變數,例如:
# 將 1 賦值給 a a = 1 # 連續賦值 b = c = 2 # print 1 print(a) # print 2 print(b) # print 2 print(c)
其他賦值運算子:
運算子 | 說 明 | 用法舉例 | 等價形式 |
---|---|---|---|
= | 最基本的賦值運算 | x = y | x = y |
+= | 加賦值 | x += y | x = x + y |
-= | 減賦值 | x -= y | x = x - y |
*= | 乘賦值 | x *= y | x = x * y |
/= | 除賦值 | x /= y | x = x / y |
%= | 取餘數賦值 | x %= y | x = x % y |
**= | 冪賦值 | x **= y | x = x ** y |
//= | 取整數賦值 | x //= y | x = x // y |
&= | 按位與賦值 | x &= y | x = x & y |
|= | 按位或賦值 | x |= y | x = x | y |
^= | 按位異或賦值 | x ^= y | x = x ^ y |
<<= | 左移賦值 | x <<= y | x = x << y,這裡的 y 指的是左移的位數 |
>>= | 右移賦值 | x >>= y | x = x >> y,這裡的 y 指的是右移的位數 |
三、位運算子
按位運算子是把數字看作二進位制來進行計算:
# 60 = 0011 1100 a = 60 # 13 = 0000 1101 b = 13 c = 0 c = a & b # print 12,12 = 0000 1100 print(c) c = a | b # print 61,61 = 0011 1101 print(c) c = a ^ b # print 49,49 = 0011 0001 print(c) c = ~a # print -61,-61 = 1100 0011 print(c) c = a << 2 # print 240,240 = 1111 0000 print(c)
位運算子 | 說明 | 使用形式 | 規則 |
---|---|---|---|
& | 按位與 | a & b | 只有參與運算的兩個位都為1時,結果才為1,否則為0。 |
| | 按位或 | a | b | 兩個二進位制位有一個為1時,結果就為1,兩個都為0時結果才為0。 |
^ | 按位異或 | a ^ b | 參與運算的兩個二進位制位不同時,結果為1,相同時結果為0。 |
~ | 按位取反 | ~a | 右結合性,作用是對參與運算的二進位制位取反。 |
<< | 按位左移 | a << b | 把運算元的各個二進位制位全部左移若干位,高位丟棄,低位補0。 |
>> | 按位右移 | a >> b | 把運算元的各個二進位制位全部右移若干位,低位丟棄,高位補0或1。 |
四、比較運算子
例如數值大小比較、真則返回 True,假則返回 False:
a = 1
b = 2
# print False
print(a == b)
# print False
print(a > b)
# print True
print(a < b)
說明 | |
---|---|
> | 大於,如果 > 前面的值大於後面的值,則返回 True,否則返回 False。 |
< | 小於,如果 < 前面的值小於後面的值,則返回 True,否則返回 False。 |
== | 等於,如果 == 兩邊的值相等,則返回 True,否則返回 False。 |
>= | 大於等於(等價於數學中的 ≥),如果 >= 前面的值大於或者等於後面的值,則返回 True,否則返回 False。 |
<= | 小於等於(等價於數學中的 ≤),如果 <= 前面的值小於或者等於後面的值,則返回 True,否則返回 False。 |
!= | 不等於(等價於數學中的 ≠),如果 != 兩邊的值不相等,則返回 True,否則返回 False。 |
is | 判斷兩個變數所引用的物件是否相同,如果相同則返回 True,否則返回 False。 |
is not | 判斷兩個變數所引用的物件是否不相同,如果不相同則返回 True,否則返回 False。 |
== 和 is 的區別:
== 用來比較兩個變數的值是否相等,而 is 則用來比對兩個變數引用的是否是同一個物件,例如:
import time
t1 = time.gmtime()
t2 = time.gmtime()
# print True
print(t1 == t2)
# print False
print(t1 is t2)
五、邏輯運算子
python 中的邏輯運算,與數學中的邏輯運算類似:
含義 | 說明 | |
---|---|---|
and | 邏輯與運算 | 當 a 和 b 為真時,a and b 的結果才為真,否則為假。 |
or | 邏輯或運算 | 當 a 和 b 兩個表示式都為假時,a or b 的結果才是假,否則為真。 |
not | 邏輯非運算 | 如果 a 為真,那麼 not a 的結果為假;如果 a 為假,那麼 not a 的結果為真。 |
# print False
print(1 + 1 > 2 and 1 + 2 > 3)
# print True
print(1 + 1 > 2 or 1 + 2 > 1)
# print True
print(not 1 + 1 > 2)
當然,python 的邏輯運算子並非只用於操作 bool 型別的表示式,它也可以返回任意型別:
# print 2
print(1 and 2)
# print 1
print(1 or 2)
and 和 or 不一定會計算右邊表示式的值,有時候只計算左邊表示式的值就能得到最終結果,另外,and 和 or 運算子會將其中一個表示式的值作為最終結果,而不是將 True 或者 False 作為最終結果。
六、三目運算子
可通過 if 語句來實現三目運算子的功能,因此可以近似地把這種 if 語句當成三目運算子,作為三目運算子的 if 語句的語法格式如下:
True_statements if expression else False_statements
三目運算子的規則是:先對邏輯表示式 expression 求值,如果邏輯表示式返回 True,則執行並返回 True_statements 的值,如果邏輯表示式返回 False,則執行並返回 False_statements 的值,看如下程式碼:
a = 5
b = 3
st = "a大於b" if a > b else "a不大於b"
# print "a大於b"
print(st)
實際上,如果只是為了在控制檯輸出提示資訊,還可以將上面的三目運算子表示式改為如下形式:
a = 5
b = 3
# print "a大於b"
print("a大於b") if a > b else print("a不大於b")
python 允許在三目運算子的 True_statements 或 False_statements 中放置多條語句,python 主要支援以下兩種放置方式:
- 多條語句以英文逗號隔開:每條語句都會執行,程式返回多條語句的返回值組成的元組。
- 多條語句以英文分號隔開:每條語句都會執行,程式只返回第一條語句的返回值。
先看第一種情形,使用如下程式碼:
a = 5
b = 3
# 第一個返回值部分使用兩條語句,逗號隔開
st = print("比較大小"), 'a大於b' if a > b else "a不大於b"
print(st)
上面程式中 True_statements 為 print("比較大小"),'a大於b',這兩條語句都會執行,程式將會返回這兩條語句的返回值組成的元組,由於 print() 函式沒有返回值,相當於它的返回值是 None,執行上面程式碼,將看到如下結果:
比較大小
(None,'a大於b')
如果將上面語句中的逗號改為分號,將逗號之後的語句改為賦值語句,即寫成如下形式:
a = 5
b = 3
# 第一個返回值部分使用兩條語句,分號隔開
st = print("比較大小"); x = 20 if a > b else "a不大於b"
print(st)
print(x)
此時雖然 True_statements 包含兩條語句,但程式只會返回第一條語句 print(”比較大小”) 的返回值,該語句同樣返回 None,因此相當於 str 的返回值為 None。執行上面程式碼,將看到如下結果:
比較大小
None
20
需要指出的是,三目運算子支援巢狀,通過巢狀三目運算子,可以執行更復雜的判斷,例如,下面程式碼需要判斷 c、d 兩個變數的大小關係:
c = 5
d = 5
# print c 等於 d
print("c 大於 d") if c > d else (print("c 小於 d") if c < d else print("c 等於 d"))
上面程式碼首先對 c > d 求值,如果該表示式為 True,程式將會執行並返回第一個表示式:print(”c 大於 d”),否則系統將會計算 else 後面的內容:(print("c 小於 d") if c < d else print("c 等於 d")),這個表示式又是一個巢狀的三目運算子表示式,注意,進入該表示式時只剩下“c 小於 d”或“c 等於 d”兩種情況,因此該三目運算子再次判斷 c < d,如果該表示式為 True,將會輸出“c 小於 d”,否則只剩下“c 等於 d”一種情況,自然就輸出該字串了。
七、運算子優先順序
從最高到最低優先順序的所有運算子:
運算子 | 描述 |
---|---|
** | 指數 (最高優先順序) |
~ + - | 按位翻轉, 一元加號和減號 (最後兩個的方法名為 +@ 和 -@) |
* / % // | 乘,除,求餘數和取整除 |
+ - | 加法減法 |
>> << | 右移,左移運算子 |
& | 位 'AND' |
^ | | 位運算子 |
<= < > >= | 比較運算子 |
== != | 等於運算子 |
= %= /= //= -= += *= **= | 賦值運算子 |
is is not | 身份運算子 |
in not in | 成員運算子 |
not and or | 邏輯運算子 |