Python - AI 助手

Python functools.total_ordering() 函数



Python 的 **functools.total_ordering()** 函数装饰器来自 functools 模块,简化了所有比较方法的实现。functools 模块旨在指定高阶函数,而 total_ordering 装饰器就是一个典型的例子。它增强了类的功能,而无需为每个比较方法进行显式定义,使代码更易于维护和高效。

语法

以下是 **total_ordering()** 函数的语法。

@total_ordering()

参数

此函数不接受任何参数。

返回值

装饰器返回具有其他比较方法(如 (__le__, __gt__, __ge__) 的类。以下示例演示了

示例 1

下面的示例演示了一个类,其中包含 __le__、__gt__ 和 __ge__ 等方法,这些方法由 **total_ordering** 装饰器自动提供。

from functools import total_ordering
@total_ordering
class Num:
    def __init__(self, val):
        self.val = val

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

    def __lt__(self, other):
        return self.val < other.val
print(Num(31) < Num(12)) 
print(Num(200) > Num(101)) 
print(Num(56) == Num(18))
print(Num(2) != Num(2)) 

输出

结果如下生成:

False
True
False
False

示例 2

在此示例中,total_ordering() 装饰器根据单词文本的长度比较单词对象。通过定义 __eq__ 和 __lt__ 方法,它会自动提供其他比较方法,从而简化比较逻辑。

from functools import total_ordering
@total_ordering
class Word:
    def __init__(self, txt):
        self.txt = txt

    def __eq__(self, other):
        return len(self.txt) == len(other.txt)

    def __lt__(self, other):
        return len(self.txt) < len(other.txt)
print(Word("grapes") < Word("watermelon"))  
print(Word("banana") < Word("kiwi"))     
print(Word("pineapple") == Word("grape")) 

输出

代码如下生成:

True
False
False

示例 3

我们现在正在创建一个代码,该代码定义了一个具有 n 和 p 坐标的点类。使用 **total_ordering()** 函数装饰器,简化了代码,方法是定义 __eq__ 和 __lt__ 方法。装饰器允许根据点的坐标轻松比较点对象。

from functools import total_ordering
@total_ordering
class Point:
    def __init__(self, n, p):
        self.n = n
        self.p = p

    def __eq__(self, other):
        return (self.n, self.p) == (other.n, other.p)

    def __lt__(self, other):
        return (self.n, self.p) < (other.n, other.p)
print(Point(31, 4) < Point(21, 11)) 
print(Point(10, 12) > Point(0, 13)) 
print(Point(2, 2) == Point(1, 1))

输出

输出如下获得:

False
True
False
python_modules.htm
广告