Python 标准运算符作为函数
在编程中,运算符通常是预定义的符号(键),用于执行某些操作,例如加法、减法、比较等。Python 有大量内置操作,分为不同的类别,例如算术、比较、按位、成员等。
python 库中的运算符模块由与内置运算符相对应的函数组成。函数的名称类似于相应运算符的类型。例如,运算符模块中的 add() 函数对应于 + 运算符。
Python 的 Object 类具有与运算符符号相对应的 dunder(名称前后双下划线)方法。这些 dunder 方法可以在用户定义的类中适当重载以实现运算符重载。运算符模块还包含相应的 dunder 函数。例如,add() 和 __add__() 都实现了 + 符号的操作。
首先让我们从运算符模块导入函数
>>> 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') #在运算符中实现 False >>> contains(a,2) True >>> 2 in a True >>> b[1] = 'x' #由 setitem() 实现的索引赋值 >>> b ['a', 'x', 'c'] >>> setitem(b,1,'b') >>> b ['a', 'b', 'c'] >>> a[1] #获取索引处的值 – 由 getitem() 实现 2 >>> getitem(a,1) 2 >>> del b[2] #删除索引处的元素。对应函数为 delitem() >>> b ['a', 'b'] >>> delitem(a,2) >>> a [1, 2]
在单个步骤中执行赋值和计算的运算符称为就地运算符。Python 的就地运算符由 operator 模块中的相应函数实现。执行加法和赋值操作的 += 运算符具有相应的 iadd() 函数。同样,每个以 ‘i’ 为前缀的运算符函数形成就地等价。
就地加法
>>> a = 10 >>> b = 20 >>> a = iadd(a,b) #等同于 a += b >>> a 30
就地减法
>>> a = 10 >>> b = 20 >>> a = isub(a,b) #等同于 a -= b >>> a -10
就地乘法
>>> a= 10 >>> b = 20 >>> a = imul(a,b) #等同于 a *= b >>> a 200
In-place division
>>> a = 10 >>> b = 4 >>> a = itruediv(a,b) >>> a 2.5
operator 模块还包含实现标准位运算符的函数
>>> and_(10,2) #相当于 10 & 2 2 >>> or_(10,2) #相当于 10 | 2 10 >>> xor(10,2) #相当于 10 ^ 2 8 >>> lshift(10,2) #相当于 10 << 2 40 >>> rshift(10,2) #相当于 10 >> 2 2