📜  opslist = {operator.add: “+”, operator.sub: “-”, operator.mul: “x”} (1)

📅  最后修改于: 2023-12-03 15:18:08.078000             🧑  作者: Mango

关于Python的operators模块

Python提供了名为“operators”的内置模块,其中包含了许多运算符相关的函数。这些函数可以用于不同的数据类型、不同的运算场景中,来方便地进行各种运算。在这个模块中,最主要的是add(),sub(),mul()等函数。

基础使用

这些函数分别对应了基本的“加”、“减”、“乘”三种运算。具体使用可以看下面的代码片段:

import operator

opslist = {operator.add: "+", operator.sub: "-", operator.mul: "x"}

a, b = 3, 4
for op, sym in opslist.items():
    print(f"{a} {sym} {b} = {op(a, b)}")

这段代码会输出:

3 + 4 = 7
3 - 4 = -1
3 x 4 = 12

这里使用了opslist来存储不同的运算符。然后通过循环,可以很方便地进行不同种类的运算操作。

扩展使用

除了基本的运算,operators模块还提供了很多其他可以方便实用的函数,例如:floordiv()用于整除运算,truediv()用于浮点数除法,pow()用于求幂运算等等。

这里给一个进阶使用的例子-比较两个对象的大小:

import operator

class MyObj:
    def __init__(self, val):
        self.val = val

    def __lt__(self, other):
        return self.val < other.val

    def __eq__(self, other):
        return self.val == other.val

objs = [MyObj(i) for i in range(1, 6)]
print("Original:    ", [obj.val for obj in objs])
objs.sort(key=operator.attrgetter('val'))
print("Ascending:   ", [obj.val for obj in objs])
objs.sort(key=operator.attrgetter('val'), reverse=True)
print("Descending:  ", [obj.val for obj in objs])

这段代码可以输出:

Original:     [1, 2, 3, 4, 5]
Ascending:    [1, 2, 3, 4, 5]
Descending:   [5, 4, 3, 2, 1]

在这段代码中,自定义了一个类MyObj,其中包含了__lt____eq__这两个函数。这里要比较的是类的对象之间的大小。然后使用attrgetter()函数获取val属性,并按顺序进行排序。

值得注意的地方

值得注意的是,这些函数都是静态函数,不属于类或实例,直接通过operator.xxx即可调用。

另外,这些函数都是不会改变参数本身的,而是返回一个新的值。例如:operator.add(a, b)不会改变ab的值,而是返回一个新的值。

总结

这些运算符函数在Python编程中有着重要的作用,可以使得代码更加简洁,易于阅读和调试。同时,使用这些函数还可以实现更精细、更复杂的运算任务。