如何比较 Python 中的 Fraction 对象?
How to compare Fraction objects in Python?
我有一个使分数相等的用例。在 Python.
中找到 fractions 模块
尝试使用像 <, == and >
这样的运算符,它似乎有效。
from fractions import Fraction
print(Fraction(5,2) == Fraction(10,4)) # returns True
print(Fraction(1,3) > Fraction(2, 3)) # return False
这是预期的比较方式吗?
找不到文档中明确指定的任何内容。
有人可以证实这一点吗(在提到它的地方用link)?
查看 implementation of the fraction module, 我们可以看到 __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)
因此 ==
和 <
/>
运算符将按预期工作。
请注意 documentation of Fraction,“分数 class 继承自抽象基础 class numbers.Rational,并从中实现所有方法和操作 class."
查看 documentation of Rational,我们发现它“子类型为 Real 并添加了分子和分母属性,这应该是最低限度的。”
对于 Real,我们发现:
To Complex, Real adds the operations that work on real numbers.
In short, those are: a conversion to float, math.trunc(), round(),
math.floor(), math.ceil(), divmod(), //, %, <, <=, >, and >=.
最后 Complex:
Subclasses of this type describe complex numbers and include the
operations that work on the built-in complex type. These are:
conversions to complex and bool, real, imag, +, -, *, /, abs(),
conjugate(), ==, and !=. All except - and != are abstract.
是的,这些操作已定义并记录在案。
我有一个使分数相等的用例。在 Python.
中找到 fractions 模块尝试使用像 <, == and >
这样的运算符,它似乎有效。
from fractions import Fraction
print(Fraction(5,2) == Fraction(10,4)) # returns True
print(Fraction(1,3) > Fraction(2, 3)) # return False
这是预期的比较方式吗?
找不到文档中明确指定的任何内容。
有人可以证实这一点吗(在提到它的地方用link)?
查看 implementation of the fraction module, 我们可以看到 __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)
因此 ==
和 <
/>
运算符将按预期工作。
请注意 documentation of Fraction,“分数 class 继承自抽象基础 class numbers.Rational,并从中实现所有方法和操作 class."
查看 documentation of Rational,我们发现它“子类型为 Real 并添加了分子和分母属性,这应该是最低限度的。”
对于 Real,我们发现:
To Complex, Real adds the operations that work on real numbers.
In short, those are: a conversion to float, math.trunc(), round(), math.floor(), math.ceil(), divmod(), //, %, <, <=, >, and >=.
最后 Complex:
Subclasses of this type describe complex numbers and include the operations that work on the built-in complex type. These are: conversions to complex and bool, real, imag, +, -, *, /, abs(), conjugate(), ==, and !=. All except - and != are abstract.
是的,这些操作已定义并记录在案。