Python operator代替匿名函数

  • Post category:Python

Python的operator模块提供了大量的函数,用于代替匿名函数在一些情况下更为方便、简洁,并且使代码更易于阅读。

下面是operator模块中常用的几个函数:

  • operator.add(a, b) # 相当于 a + b
  • operator.sub(a, b) # 相当于 a – b
  • operator.mul(a, b) # 相当于 a * b
  • operator.truediv(a, b) # 相当于 a / b
  • operator.floordiv(a, b) # 相当于 a // b
  • operator.mod(a, b) # 相当于 a % b
  • operator.pow(a, b) # 相当于 a ** b
  • operator.eq(a, b) # 相当于 a == b
  • operator.ne(a, b) # 相当于 a != b
  • operator.lt(a, b) # 相当于 a < b
  • operator.le(a, b) # 相当于 a <= b
  • operator.gt(a, b) # 相当于 a > b
  • operator.ge(a, b) # 相当于 a >= b

这些函数与数学运算符操作同样的方式,传递两个参数并返回结果。函数名与数学运算符的名称相同,调用方便。

下面是一个示例,使用operator模块将字典按照值降序排序:

import operator

data = {'apple': 10, 'banana': 6, 'orange': 20, 'peach': 5}
sorted_data = sorted(data.items(), key=operator.itemgetter(1), reverse=True)
print(sorted_data)

这个例子中,我们使用了operator.itemgetter(1)来指定按照字典的值进行排序,相当于lambda x: x[1]

除了上述常用函数之外,operator还提供了其他函数,例如attrgetter()methodcaller()等等,它们可以用来操作对象的属性或调用对象的方法。

下面是一个示例,使用operator模块对一个类中的实例对象进行排序:

import operator

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f'Person({self.name}, {self.age})'

people = [Person('Alice', 25), Person('Bob', 35), Person('Charlie', 30)]
sorted_people = sorted(people, key=operator.attrgetter('age'))
print(sorted_people)

这个例子中,我们使用了operator.attrgetter('age')来指定按照年龄进行排序,相当于lambda p: p.age

operator模块提供的函数能够简化代码,使它更易于阅读和维护。