当我在搞乱Python时,
>>> [attr for attr in dir(1) if not attr.startswith('_')]
['bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']
>>> [attr for attr in dir(1.1) if not attr.startswith('_')]
['as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']
虽然我理解'共轭','成像'和'真实'是为了与复杂类型兼容,但我不明白为什么'分子'和'分母'只存在于int中,并且不存在不适合漂浮。
对此有何解释?
答案 0 :(得分:5)
这很可能是因为花车有些有损 - 它们不能很好地代表每一个价值。考虑这个例子:
>>> 1.0/5.0
0.20000000000000001
如果您想访问,1.0/5.0
python的分母必须返回18014398509481984
(20000000000000001/100000000000000000 == 3602879701896397/18014398509481984
)。精度的损失将导致python别无选择,只能返回疯狂的值,因此设计人员选择不实现该功能。
答案 1 :(得分:5)
答案 2 :(得分:2)
这是因为int
是rational
的子类,float
不是。由于rational
具有分母属性,int
继承了它。
您可以阅读更多here