在Python 3中,整数除法或任何包含浮点数的结果都会导致浮点数:
>>> from fractions import Fraction
>>> f = Fraction(1, 2)
>>> f / 2
Fraction(1, 4)
>>> 2 / f
Fraction(4, 1)
>>> 1 / 2
0.5
>>> 2 / 1
2.0
>>> f / .1
5.0
>>> f / .2
2.5
>>> .2 / f
0.4
我想除以返回分数,即得到以下行为:
>>> 1 / 2
Fraction(1, 2)
>>> 2 / 1
Fraction(2, 1)
我尝试重新定义部门未成功:
>>> int.__truediv__ = lambda self, other: Fraction(self) / Fraction(other)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type 'int'
我有什么选择?我可以介绍MyFraction衍生自Fraction的类。至少我希望能够定义一个类似dict-like的类X,这样
>>> X({'a': 1/3}) == X({'a': Fraction(1, 3)})
True
如果并且当将有理类型添加到Python中时(请参阅PEP 239),则将整型和整型数进行真除可能应该返回有理。这就避免了真正的整数分割和长时间丢失信息的问题。但是直到那时,为了保持一致性,浮点数是进行真正除法的唯一选择。
慕尼黑5688855
相关分类