如何在Python中比较Fraction对象



我有一个等价分数的用例。在Python中找到分数模块。

尝试使用像<, == and >这样的运算符,它似乎有效。

from fractions import Fraction
print(Fraction(5,2) == Fraction(10,4)) # returns True
print(Fraction(1,3) > Fraction(2, 3))  # return False

这是进行比较的预期方式吗?

找不到文档中明确指定的任何内容。

有人能证实这一点吗(通过链接到提到它的来源(?

从Fraction的文档中注意到;Fraction类继承自抽象基类编号。Rational,并实现该类中的所有方法和操作">

查看Rational的文档,我们发现它";子类型Real,并添加分子和分母属性,这些属性应该是最低项">

对于Real,我们发现:

对于复数,Real添加了对实数有效的运算。

简而言之,它们是:转换为float、math.trunk((、round((、,math.floor((,math.ceil((,divmod((,//,%,<lt;=>,并且>=。

最后是复杂:

这种类型的子类描述复数,并包括在内置复杂类型上工作的操作。这些是:转换为复数和布尔、实数、imag、+、-、*、/、abs((,共轭((,==,和!=。除了-和!=都是抽象的。

是的,这些操作已经定义并记录在案。

查看分数模块的实现,我们可以看到__eq__被定义为:

def __eq__(a, b):
"""a == b"""
if type(b) is int:
return a._numerator == b and a._denominator == 1
if isinstance(b, numbers.Rational):
return (a._numerator == b.numerator and
a._denominator == b.denominator)
...

__lt____gt__:也是如此

def __lt__(a, b):
"""a < b"""
return a._richcmp(b, operator.lt)
def __gt__(a, b):
"""a > b"""
return a._richcmp(b, operator.gt)

因此,==</>运算符将按预期工作。

相关内容

  • 没有找到相关文章

最新更新