有没有办法让“可变”Fraction
?
我试过了,但是分数的分子分母是不可变的。在
>>> from fractions import Fraction
>>> x = Fraction(0,1)
>>> numerators = [1,2,3,4,5]
>>> denominators = [9,8,7,6,5]
>>> for n,d in zip(numerators, denominators):
... x.numerator+= n
... x.denominator+= d
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: can't set attribute
我这样做是因为我的分子/分母来自另一个函数,它返回分数生成器。在
^{pr2}$(请注意,我不是在加1/9 + 2/8 + 3/7 + 4/6
,我是想把分子和除以分母之和)
是否存在“可变”分数?
有趣的想法,但可以用一些简单的数学来解决:
你可以see this in practice here。在
正如我在评论中所暗示的,但是user4815162342说得更清楚,}是不可变的,因为整数的概念是不可变的。在
Fractions
是不可变的,因为分数是不可变的,就像{7是7是'seven'是
7
,因此为一个不可变的想法创建一个可变的对象是没有意义的。很像3/4
是0.75是“四分之三”,不管你怎么定义它,这个想法都是一样的,所以让一个表示静态概念的对象是可变的是没有意义的。在有意义的是用数学来修正它们的3/4,分母现在是8,这不是一件事。分数的加法或乘法更直观。在
由于两个原因,}是不可变的:
numerator
和{其他Python数字类型是不可变的,包括同样由两个更简单的数值组成的复数,以及任意宽度的数量,如}。可变分数是个例外。
long
和{能够单独突变分子和分母将有可能使分数无效,例如使其非标准化,或将分母设置为零。
换句话说,没有公共API来改变
fractions.Fraction
对象。如果你真的需要一个单独的分子和分母的总和,这听起来不是很有用,你的第二个代码片段是一个合理的方法。第一个片段的更精确的格式副本可以如下所示:相关问题 更多 >
编程相关推荐