1. 程式人生 > 實用技巧 >python 學習(五)- 運算子

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 主要支援以下兩種放置方式:

  1. 多條語句以英文逗號隔開:每條語句都會執行,程式返回多條語句的返回值組成的元組。
  2. 多條語句以英文分號隔開:每條語句都會執行,程式只返回第一條語句的返回值。

先看第一種情形,使用如下程式碼:

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 邏輯運算子