Python標準運算子作為函式


在程式設計中,運算子通常是一個預定義的符號(鍵),用於執行某些操作,例如加法、減法、比較等。Python 有一套龐大的內建運算子,分為算術運算子、比較運算子、位運算子、成員運算子等不同類別。

Python 庫中的 operator 模組包含與內建運算子對應的函式。函式名稱類似於相應運算子的型別。例如,operator 模組中的 add() 函式對應於 + 運算子。

Python 的 Object 類具有與運算子符號對應的 dunder(名稱前後帶有雙下劃線)方法。這些 dunder 方法可以在使用者定義的類中進行適當的過載,以實現運算子過載。operator 模組也包含相應的 dunder 函式。例如,add() 和 __add__() 都實現了 + 符號的操作。

首先,讓我們從 operator 模組匯入函式

>>> from operator import *

要了解與算術運算子對應的函式,我們將初始化兩個變數為

>>> a = 10
>>> b = 20

add()、sub() 和 mul() 分別對應於 +、- 和 * 運算子。除法符號 / 由 truediv() 函式實現。

>>> add(a,b)
30
>>> a + b
30
>>> sub(a,b)
-10
>>> a - b
-10
>>> mul(a,b)
200
>>> a * b
200
>>> truediv(a,b)
0.5
>>> a / b
0.5

其他算術運算子 %、** 和 // 分別由 operator 模組中的 mod()、pow() 和 floordiv() 函式實現。

>>> a = 5
>>> b = 3
>>> a % b
2
>>> mod(a,b)
2
>>> a ** b
125
>>> pow(a,b)
125
>>> a // 2
2
>>> floordiv(a,b)

邏輯運算子 <、<=、>、>=、== 和 != 分別由 lt()、le()、gt()、ge()、eq() 和 ne() 函式實現。

>>> a = 5
>>> b = 7
>>> a < b
True

>>> lt(a,b)
True

>>> a <= b
True

>>> le(a,b)
True

>>> a > b
False

>>> gt(a,b)
False

>>> a >= b
False

>>> ge(a,b)
False

>>> a == b
False

>>> eq(a,b)
False

>>> a != b
True

>>> ne(a,b)
True

處理序列的函式

Python 的內建運算子 in、+(連線)和 del 分別由 contains()、concat()、delitem() 函式實現。對於索引賦值運算子 seq[x] = y,使用 setitem() 函式。對於獲取 seq[x] 的值,使用 getitem() 函式。

>>> a = [1,2,3]
>>> b = ['a','b','c']
>>> a + b #sequence concatenation
[1, 2, 3, 'a', 'b', 'c']

>>> concat(a,b)
[1, 2, 3, 'a', 'b', 'c']

>>> contains(a,'2') #implements in operator
False

>>> contains(a,2)
True

>>> 2 in a
True

>>> b[1] = 'x' #index assignment implemented by setitem()

>>> b
['a', 'x', 'c']

>>> setitem(b,1,'b')
>>> b
['a', 'b', 'c']

>>> a[1] #fetching value at index – implemented by getitem()
2

>>> getitem(a,1)
2

>>> del b[2] #deleting element at index. Corresponding function is delitem()

>>> b
['a', 'b']

>>> delitem(a,2)
>>> a
[1, 2]

一步完成賦值和計算的運算子稱為就地運算子。Python 的就地運算子由 operator 模組中的相應函式實現。執行加法和賦值操作的 += 運算子具有相應的 iadd() 函式。同樣,每個運算子函式名字首為“i”都構成其就地等效項。

就地加法

>>> a = 10
>>> b = 20
>>> a = iadd(a,b) #equivalent to a += b
>>> a
30

就地減法

>>> a = 10
>>> b = 20
>>> a = isub(a,b) #equivalent to a -= b
>>> a
-10

就地乘法

>>> a= 10
>>> b = 20
>>> a = imul(a,b) #equivalent to a *= b
>>> a
200

就地除法

>>> a = 10
>>> b = 4
>>> a = itruediv(a,b)
>>> a
2.5

operator 模組還包含實現標準位運算子的函式

>>> and_(10,2) #equivalent to 10 & 2
2
>>> or_(10,2) #equivalent to 10 | 2
10
>>> xor(10,2) #equivalent to 10 ^ 2
8
>>> lshift(10,2) #equivalent to 10 << 2
40
>>> rshift(10,2) #equivalent to 10 >> 2
2

更新於:2020年6月27日

330 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告