Python2.x 版本中,使用 cmp() 函數(shù)來比較兩個列表、數(shù)字或字符串等的大小關(guān)系。
Python 3.X 的版本中已經(jīng)沒有 cmp() 函數(shù),如果你需要實現(xiàn)比較功能,需要引入 operator 模塊,適合任何對象,包含的方法有:
operator.lt(a, b)
operator.le(a, b)
operator.eq(a, b)
operator.ne(a, b)
operator.ge(a, b)
operator.gt(a, b)
operator.__lt__(a, b)
operator.__le__(a, b)
operator.__eq__(a, b)
operator.__ne__(a, b)
operator.__ge__(a, b)
operator.__gt__(a, b)
operator.lt(a, b) 與 a < b 相同, operator.le(a, b) 與 a <= b 相同,operator.eq(a, b) 與 a == b 相同,operator.ne(a, b) 與 a != b 相同,operator.gt(a, b) 與 a > b 相同,operator.ge(a, b) 與 a >= b 相同。
import operator
x = 10
y = 20
print("x:",x, ", y:",y)
print("operator.lt(x,y): ", operator.lt(x,y))
print("operator.gt(y,x): ", operator.gt(y,x))
print("operator.eq(x,x): ", operator.eq(x,x))
print("operator.ne(y,y): ", operator.ne(y,y))
print("operator.le(x,y): ", operator.le(x,y))
print("operator.ge(y,x): ", operator.ge(y,x))
print()
x = "Google"
y = "w3cschool"
print("x:",x, ", y:",y)
print("operator.lt(x,y): ", operator.lt(x,y))
print("operator.gt(y,x): ", operator.gt(y,x))
print("operator.eq(x,x): ", operator.eq(x,x))
print("operator.ne(y,y): ", operator.ne(y,y))
print("operator.le(x,y): ", operator.le(x,y))
print("operator.ge(y,x): ", operator.ge(y,x))
print()
print("type((operator.lt(x,y)): ", type(operator.lt(x,y)))
以上代碼輸出結(jié)果為:
x: 10 , y: 20
operator.lt(x,y): True
operator.gt(y,x): True
operator.eq(x,x): True
operator.ne(y,y): False
operator.le(x,y): True
operator.ge(y,x): True
x: Google , y: w3cschool
operator.lt(x,y): True
operator.gt(y,x): True
operator.eq(x,x): True
operator.ne(y,y): False
operator.le(x,y): True
operator.ge(y,x): True
比較兩個列表:
import operator
a = [1, 2]
b = [2, 3]
c = [2, 3]
print("operator.eq(a,b): ", operator.eq(a,b))
print("operator.eq(c,b): ", operator.eq(c,b))
以上代碼輸出結(jié)果為:
operator.eq(a,b): False
operator.eq(c,b): True
運算符函數(shù)
operator 模塊提供了一套與 Python 的內(nèi)置運算符對應(yīng)的高效率函數(shù)。例如,operator.add(x, y) 與表達式 x+y 相同。
函數(shù)包含的種類有:對象的比較運算、邏輯運算、數(shù)學(xué)運算以及序列運算。
對象比較函數(shù)適用于所有的對象,函數(shù)名根據(jù)它們對應(yīng)的比較運算符命名。
許多函數(shù)名與特殊方法名相同,只是沒有雙下劃線。為了向后兼容性,也保留了許多包含雙下劃線的函數(shù),為了表述清楚,建議使用沒有雙下劃線的函數(shù)。
import operator
a = 4
b = 3
print ("add() 運算結(jié)果 :",end="");
print (operator.add(a, b))
print ("sub() 運算結(jié)果 :",end="");
print (operator.sub(a, b))
print ("mul() 運算結(jié)果 :",end="");
print (operator.mul(a, b))
以上代碼輸出結(jié)果為:
add() 運算結(jié)果 :7
sub() 運算結(jié)果 :1
mul() 運算結(jié)果 :12
運算
|
語法
|
函數(shù)
|
加法
|
a + b
|
add(a, b)
|
字符串拼接
|
seq1 + seq2
|
concat(seq1, seq2)
|
包含測試
|
obj in seq
|
contains(seq, obj)
|
除法
|
a / b
|
truediv(a, b)
|
除法
|
a // b
|
floordiv(a, b)
|
按位與
|
a & b
|
and_(a, b)
|
按位異或
|
a ^ b
|
xor(a, b)
|
按位取反
|
~ a
|
invert(a)
|
按位或
|
a | b
|
or_(a, b)
|
取冪
|
a ** b
|
pow(a, b)
|
標識
|
a is b
|
is_(a, b)
|
標識
|
a is not b
|
is_not(a, b)
|
索引賦值
|
obj[k] = v
|
setitem(obj, k, v)
|
索引刪除
|
del obj[k]
|
delitem(obj, k)
|
索引取值
|
obj[k]
|
getitem(obj, k)
|
左移
|
a << b
|
lshift(a, b)
|
取模
|
a % b
|
mod(a, b)
|
乘法
|
a * b
|
mul(a, b)
|
矩陣乘法
|
a @ b
|
matmul(a, b)
|
取反(算術(shù))
|
- a
|
neg(a)
|
取反(邏輯)
|
not a
|
not_(a)
|
正數(shù)
|
+ a
|
pos(a)
|
右移
|
a >> b
|
rshift(a, b)
|
切片賦值
|
seq[i:j] = values
|
setitem(seq, slice(i, j), values)
|
切片刪除
|
del seq[i:j]
|
delitem(seq, slice(i, j))
|
切片取值
|
seq[i:j]
|
getitem(seq, slice(i, j))
|
字符串格式化
|
s % obj
|
mod(s, obj)
|
減法
|
a - b
|
sub(a, b)
|
真值測試
|
obj
|
truth(obj)
|
比較
|
a < b
|
lt(a, b)
|
比較
|
a <= b
|
le(a, b)
|
相等
|
a == b
|
eq(a, b)
|
不等
|
a != b
|
ne(a, b)
|
比較
|
a >= b
|
ge(a, b)
|
比較
|
a > b
|
gt(a, b)
|