我有一个等价分数的用例。在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)
因此,==
和<
/>
运算符将按预期工作。