如何在Python中比较分数对象?
我有一个等分的用例。在Python中找到分数模块 尝试使用像如何在Python中比较分数对象?,python,python-3.x,compare,fractions,Python,Python 3.x,Compare,Fractions,我有一个等分的用例。在Python中找到分数模块 尝试使用像这样的运算符,似乎效果不错 from fractions import Fraction print(Fraction(5,2) == Fraction(10,4)) # returns True print(Fraction(1,3) > Fraction(2, 3)) # return False 这是进行比较的预期方式吗 找不到文档中明确指定的任何内容 有人能证实这一点吗(与提到的源代码链接)?查看我们可以看到\uuuu
这样的运算符,似乎效果不错
from fractions import Fraction
print(Fraction(5,2) == Fraction(10,4)) # returns True
print(Fraction(1,3) > Fraction(2, 3)) # return False
这是进行比较的预期方式吗
找不到文档中明确指定的任何内容
有人能证实这一点吗(与提到的源代码链接)?查看我们可以看到\uuuu eq\uuu
定义如下:
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)
...
《代码》和《代码》也是如此:
def __lt__(a, b):
"""a < b"""
return a._richcmp(b, operator.lt)
def __gt__(a, b):
"""a > b"""
return a._richcmp(b, operator.gt)
def\uu lt\uu(a,b):
“ab”
返回a.(b,operator.gt)
因此,=
和
运算符将按预期工作。查看,我们可以看到\uuuuueq\uuuu
定义为:
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)
...
《代码》和《代码》也是如此:
def __lt__(a, b):
"""a < b"""
return a._richcmp(b, operator.lt)
def __gt__(a, b):
"""a > b"""
return a._richcmp(b, operator.gt)
def\uu lt\uu(a,b):
“ab”
返回a.(b,operator.gt)
因此=
和
运算符将按预期工作。请注意“分数类继承自抽象基类numbers.Rational,并实现该类的所有方法和操作。”
查看,我们发现它“将实数分为子类型,并添加分子和分母属性,这些属性应该是最低值。”
例如,我们发现:
对于Complex,Real添加了处理实数的操作
简言之,它们是:对float的转换、math.trunc()、round(),
math.floor()、math.ceil()、divmod()、/、%、=
最后:
这种类型的子类描述复数,并包括
处理内置复杂类型的操作。这些是:
转换为复数和布尔、实数、imag、+、-、*、/、abs(),
共轭()。除了-和!=这些都是抽象的
是的,这些操作是定义和记录的。请注意“分数类继承自抽象基类numbers.Rational,并从该类实现所有方法和操作。”
查看,我们发现它“将实数分为子类型,并添加分子和分母属性,这些属性应该是最低值。”
例如,我们发现:
对于Complex,Real添加了处理实数的操作
简言之,它们是:对float的转换、math.trunc()、round(),
math.floor()、math.ceil()、divmod()、/、%、=
最后:
这种类型的子类描述复数,并包括
处理内置复杂类型的操作。这些是:
转换为复数和布尔、实数、imag、+、-、*、/、abs(),
共轭()。除了-和!=这些都是抽象的
因此,是的,这些操作是定义和记录的。您是否希望有不同的操作?确认什么?你能澄清你的问题是什么吗?是的,5/2==10/4应该为真,1/3>2/3应该为假。你的期望是什么?有什么不同吗?如果没有,你对此有什么疑问?这是有效的。我只是想确认这是否是比较分数对象的预期方式。你所说的“比较分数对象的预期方式”是什么意思?这些是比较运算符,您还希望使用什么来比较分数?我不确定是否存在任何类方法或其他东西(在任何父类中)。无论如何,我得到了答案。谢谢。你会期待一些不同的东西吗?确认什么?你能澄清你的问题是什么吗?是的,5/2==10/4应该为真,1/3>2/3应该为假。你的期望是什么?有什么不同吗?如果没有,你对此有什么疑问?这是有效的。我只是想确认这是否是比较分数对象的预期方式。你所说的“比较分数对象的预期方式”是什么意思?这些是比较运算符,您还希望使用什么来比较分数?我不确定是否存在任何类方法或其他东西(在任何父类中)。无论如何,我得到了答案。谢谢,谢谢。我不知道a==b表达式调用了“_eq”方法。谢谢。我不知道a==b表达式调用“_eq”方法。