Python 運算子

Jinku Hu 2023年1月30日 2018年2月26日
  1. Python 算術運算子
  2. Python 比較運算子
  3. Python 邏輯運算子
  4. Python 位運算子
  5. Python 賦值運算子
  6. Python 特殊運算子
Python 運算子

我們將在這一節裡介紹 Python 運算子的相關知識。

運算子是對運算元 (值或變數) 執行特定操作的特殊符號, 例如, 在 a + b 中, + 是操作變數 a 和 b 的運算子, 這些變數稱為運算元。

下面是 Python 運算子的一些型別:

Python 算術運算子

算術運算子對變數進行加法、減法、乘法等算術運算的運算子。

以下表格列出了 Python 算術運算子以及示例:

運算子 描述 例子
+ 加法運算 a + b, +a
- 減法運算 a - b, -a
* 乘法運算 a * b
/ 除法運算,結果總是返回浮點型別。 a / b
% 求餘運算 a % b
// 取整除,結果返回捨去小數部分的整數 a // b
** 冪運算,返回 x 的 y 次方 a ** b

Python 算術運算子例項

下面的程式碼中是, 算術運算子用於兩個運算元的例子:

a = 24
b = 7
print('a + b =', a+b)
print('a - b =', a-b)
print('a * b =', a*b)
print('a / b =', a/b)
print('a // b =', a//b)
print('a ** b =', a**b)
a + b = 31
a - b = 17
a * b = 168
a / b = 3.4285714285714284
a // b = 3
a ** b = 4586471424

Python 比較運算子

比較運算子是用來比較兩個值大小的運算子,運算子的結果是二選一,True 或是 False

下面列舉出 Python 中的比較運算子:

運算子 描述 例子
> 大於 - 比較 a 是否大於 b a > b
< 等於 - 比較 a 是否小於 b a < b
== 等於 - 比較兩變數是否相等 a == b
!= 不等於 - 比較兩變數是否不相等 a != b
>= 大於等於 - 比較 a 是否大於或等於 b a >= b
<= 小於等於 - 比較 a 是否小於或等於 b a <= b

Python 比較運算子例項

下面舉例來說明 Python 比較運算子的應用。

a = 12
b = 24
print('a > b is ', a>b)
print('a < b is ', a<b)
print('a == b is ', a==b)
print('a != b is ', a!=b)
print('a >= b is ', a>=b)
print('a <= b is ', a<=b)
a > b is False
a < b is True
a == b is False
a != b is True
a >= b is False
a <= b is True

Python 邏輯運算子

運算子 描述 例子
and 與運算 - 如果兩側邏輯都為 True,則結果為 True,否則為 False a and b
or 或運算 - 如果兩側邏輯有一個為 True,則結果為 True,否則為 False a or b
not 非運算 - 如果 a 為 True,返回 False; 如果 a 為 False,返回 True not a

Python 邏輯運算子例項

下面舉例來說明 Python 邏輯運算子的具體應用。

a = False
b = True
print('a and b =', a and b)
print('a or b =', a or b)
print('not b =', not b)
a and b = False
a or b = True
not b = False

Python 位運算子

Python 位運算子執行位運算,其中的運算元是執行位運算的二進位制數字。
下面列出來 Python 中所有的位運算子,為了方便說明,我們取 a = 4 (0b100) 以及 b = 5 (0b101):

運算子 描述 例子
& 位與操作符 - 當兩側數字在該位上都是 1 的時候,結果該位也為 1,否則為 0 a &b = 4
| 位或操作符 - 當兩側數字在該位上只要有一個是 1 的時候,結果該位為 1,否則為 0 a | b = 5
~ 位取反操作符 - 對運算元進行按位取反操作,1 變成 00 變成 1 ~a = -5
^ 位異或操作符 - 當兩側數字對應位二進位制相異時,結果為 1 a^b= 1
>> 右移操作符 - 將 >> 左側的數字右移若干位,左側補齊 0 a >>2= 1
<< 左移操作符 - 將 >> 左側的數字左移若干位,右側補 0,左側高位數捨棄 a<< 2 =16

Python 賦值運算子

賦值運算子 = 為變數分配數值。賦值運算子對變數進行初始化,比如 x = 1 將數值 1 賦值給變數 x

在 Python 中, 有複合賦值運算子, 它們是將算術運算子和賦值運算子相組合, 或者是將按位和賦值運算子相組合。

比如,x += 2 就是一個複合賦值語句, 其中 2 與變數 x 相加, 結果儲存在變數 x 中。

下面是賦值運算子以及複合賦值運算子的列表。

運算子 例子 等效於
= a = 8 a = 8
+= a += 8 a = a + 8
-= a -= 8 a = a - 8
*= a *= 8 a = a * 8
/= a /= 8 a = a / 8
%= a %= 8 a = a % 8
/= a /= 8 a = a / 8
*= a *= 8 a = a * 8
&= a &= 8 a = a & 8
` =` `a
^= a ^= 8 a = a ^ 8
>>= a >>= 8 a = a >> 8
<<= a <<= 8 a = a << 8

Python 特殊運算子

在 Python 程式設計中, 有一些運算子具有特殊的含義, 稱為特殊運算子, 例如身份運算子以及成員運算子等。In Python

身份運算子

在 Python 中, 運算子 isis not 被稱為身份運算子。身份運算子用於確定兩個變數是否是記憶體的同一部分。所以兩個變數是相等的, 兩個變數是相同的是兩個不同的語句。兩個變數假如具有相同的數值,那它們兩個數值相等,但並不是同一個 Python 物件。

運算子 描述
is 兩個變數具有相同的記憶體位置
is not 兩個變數不是指向相同的記憶體位置

Python 身份運算子例項

下面具體來說明下 Python 身份運算子的含義,

>>> a = [1]
>>> b = [1]
>>> c = a
>>> a is b
False
>>> a is c
True

ab 雖然具有相同的資料,都是列表 [1],但它們指向的不是同一個記憶體物件,所以 a is not b。但 c=aa 的記憶體地址賦予了 c 的記憶體地址,所有它們指向了同一個 Python 物件,所以 a is c 是成立的。你可以用 id(x) 內建函式來具體檢視變數的記憶體地址

>>> id(a), id(b), id(c)
(87402760L, 87404296L, 87402760L)

從結果也能看出來,ac 具有相同的記憶體地址,並且同 b 不同。

Python 成員運算子

在 Python 中,運算子 innot in 被稱為成員運算子。成員運算子用於檢查變數是否位於序列(列表,元組,字串和字典)中。所以兩個變數相等並且兩個變數相同是兩個不同的語句。

對 Python 字典進行運算子操作的時候,它只能檢查字典中的鍵,而不是檢查值。

運算子 描述
in in 前面的變數後面的序列中時,結果為 True
not in in 前面的變數不在後面的序列中時,結果為 True

Python 成員運算子例項

>>> a = 'Python Programming'
>>> print('y' in a)
True
>>> print('b' not in a)
True
>>> print('b' in a)
False
>>> x = {1:2;3:4}
>>> 1 in a
True
>>> 2 in a
False

y 存在於序列 a(字串)中,因此 y in a 返回 True。類似地,b 不存在 a 中,所以返回 False

字典 x 具有兩個鍵 13,它們的值分別是 241 是字典的鍵,所以 1 in a 成立;雖然 2 是字典中某個鍵的值,但並不是鍵,所以 2 in a 並不成立。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn