生产级别的'Min'和'Max'对象(根据PEP 326改编)
项目描述
peak.util.extremes模块提供了一个生产级别的PEP 326中Min和Max对象的实现。虽然PEP 326被拒绝包含在语言或标准库中,但其中描述的对象在各种应用中非常有用。在PEAK中,它们被用来实现通用函数(在RuleDispatch和PEAK-Rules中),以及处理Trellis中的调度和时间操作。因为这导致每个项目复制相同的代码,所以我们现在将其模块分离出来,以便可以独立使用。
一些简单的使用示例
>>> from peak.util.extremes import Min, Max >>> import sys >>> Min < -sys.maxint True >>> Min < None True >>> Min < '' True >>> Max > sys.maxint True >>> Max > 99999999999999999 True >>> type(Min) <class 'peak.util.extremes.Extreme'>
Min对象与其他任何对象比较都小于它自己,而Max对象与其他任何对象比较都大于它自己。它们都是Extreme类型的实例。
虽然这些极值原始PEP 326实现比这里使用的版本更短,但它包含一个缺陷:它没有正确处理与经典类实例的比较。因此,这个版本定义了所有六个丰富比较运算符的方法,以确保对经典以及新式类的正确支持
>>> Max >= Min and Max > Min and Max==Max and Max!=Min True >>> Max < Min or Max <= Min or Max==Min or Max!=Max False >>> Min <= Max and Min < Max and Min==Min and Min!=Max True >>> Min > Max or Min >= Max or Min==Max or Min!=Min False >>> class X: ... """Ensure rich comparisons work correctly with classic classes""" >>> x = X() >>> Min<x<Max and Min<=x<=Max and Min!=x!=Max and Max!=x!=Min True >>> Min>x or x>Max or x<=Min or x>=Max or x==Min or Min==x False