Python中operator 模組的用法

Python探索牛發表於2024-04-17

operator 模組提供了一套與 Python 的內建運算子對應的高效率函式。

1.函式的種類

函式包含的種類有:物件的比較運算、邏輯運算、數學運算和序列運算

2.比較運算

運算 函式 語法
小於 lt(a, b) a < b
小於等於 le(a, b) a <= b
大於 gt(a, b) a > b
大於等於 ge(a, b) a >= b
等於 eq(a, b) a == b
不等於 ne(a, b) a != b

例項:

>>> from operator import *
>>> lt(1, 2)     
True
>>> le(1, 3)    
True
>>> le(3, 3)   
True
>>> gt(10, 1)   
True
>>> ge(10, 10)
True
>>> ge(10, 9)  
True
>>> eq(10, 9) 
False
>>> ne(10,10) 
False
>>> ne(10, 9)
True

3.邏輯運算

運算 函式 語法
and_(a, b) a & b
or_(a, b) a
異或 xor(a, b) a ^ b
取反 invert(a, b) ~ a
物件是否相等 is_(a, b) a is b
物件是否不相等 is_not(a, b) a is not b
真值 truth(obj) obj

例項:

>>> from operator import *
>>> and_(1, 1)
1
>>> or_(1, 2)
3
>>> xor(1, 2)
3
>>> invert(True)
-2
>>> invert(1)
-2
>>> invert(2)
-3
>>> a = [1, 2, 3]
>>> b = 3
>>> is_(a, b)
False
>>> is_not(a, b)
True
>>> truth(a)
True

4.數學運算

運算 函式 語法
add(a ,b) a + b
truediv(a, b) a / b
mul(a, b) a * b
sub(a, b) a - b
pow(a, b) a ** b
負數 neg(a) - a
正數 pos(a) + a
取模 mod(a, b) a % b

例項:

>>> from operator import *
>>> add(1, 2)
3
>>> truediv(3, 2)
1.5
>>> mul(3, 2)
6
>>> sub(3, 2)
1
>>> pow(2, 8)
256
>>> neg(5)
-5
>>> neg(-5)
5
>>> pos(10)
10
>>> pos(-10)
-10
>>> mod(10, 3)
1

5.序列運算

運算 函式 語法
字串拼接 concat(seq1, seq2) seq1 + seq2
包含 contains(seq, obj) obj in seq
索引賦值 setitem(obj, i, v) obj[i] = v
索引刪除 delitem(obj, i) del obj[i]
索引取值 getitem(obj, i) obj[i]
切片賦值 setitem(seq, slice(i, j), values) seq[i:j] = values
切片刪除 delitem(seq, slice(i, j)) del seq[i:j]
切片取值 getitem(seq, slice(i, j)) seq[i:j]
格式化 mod(s, obj) s % obj

例項:

>>> from operator import *
>>> concat('hello', ' Python')
'hello Python'
>>> a = [1, 3, 4]
>>> contains(a, 2)
False
>>> setitem(a, 1, 5)
>>> a
[1, 5, 4]
>>> delitem(a, 2)
>>> a
[1, 5]
>>> getitem(a, 1)
5
>>> setitem(a, slice(1, 3), 'ijk')
>>> a
[1, 'i', 'j', 'k']
>>> delitem(a, slice(2, 3))
>>> a
[1, 'i', 'k']
>>> mod('str %s', 'value')
'str value'

6.attrgetter類

operator 模組的 attrgetter 類可以獲取物件的屬性用於 map(), stored() 操作

attrgetter例項:

from operator import *

class Student:
    pass

    def __init__(self, name, score):
        self.name = name
        self.score = score

    def __repr__(self):
        return '%s(name=%r,score=%r)' % (self.__class__.__name__, self.name, self.score)

if __name__ == '__main__':
    students = [Student("zhangSan", 89),
                Student("liSi", 60),
                Student("wangWu", 70),
                Student("xiaoMing", 100)]

	#學習中遇到問題沒人解答?小編建立了一個Python學習交流群:153708845
    print("按照【分數】排序: ")
    print(sorted(students, key=attrgetter('score'), reverse=True))

    g = attrgetter("score") # 獲取【分數】屬性
    vals = [g(i) for i in students]
    print ('獲取分數屬性:' + vals)

7.itemgetter類

operator 模組的 itemgetter 類會返回一個可呼叫物件,傳入多個物件則返回元組

itemgetter例項:

>>> from operator import *
>>> itemgetter(3)('abcdefg')
'd'
>>> itemgetter(1, 3, 4)('abcdefg')
('b', 'd', 'e')
>>> itemgetter('name')({'name': 'liSi', 'age': 18})
'liSi'
>>> soldier = dict(rank='captain', name='dotterbart')
>>> itemgetter('rank')(soldier)
'captain'
>>> inventory = [('apple', 8), ('banana', 2), ('pear', 7)]
>>> getCount = itemgetter(1)
>>> list(map(getCount, inventory))
[8, 2, 7]
>>> sorted(inventory, key = getCount)
[('banana', 2), ('pear', 7), ('apple', 8)]

相關文章