纯Python有理数模块适用于2.5版本

7

有人看过这样的东西吗?更倾向于小型自给自足的模块。

3个回答

10

真的,我以为这会更困难! - Constantin
注意:这似乎在一般情况下不起作用。例如:fractions.Fraction(10) * 10 => 属性错误:'int'对象没有'numerator'属性。在Python 2.6中,int对象似乎有一个分子,但在Python 2.5中没有。我很想知道其他人是如何解决这个问题的(我强制将我的字面量转换为分数,然后再使用运算符)。 - benno
更好的解决方法是在“_operator_fallbacks”函数中更改“forward”和“reverse”的定义,以正确处理int和long类型。由于格式选项有限,很难在注释中描述,但类似于以下内容:“elif isinstance(b, (int, long)): return monomorphic_operator(a, Fraction(b)” - benno

9

SymPy是一款完全使用Python编写的符号数学库,支持有理数。根据教程

>>> from sympy import *
>>> a = Rational(1,2)

>>> a
1/2

>>> a*2
1

>>> Rational(2)**50/Rational(10)**50
1/88817841970012523233890533447265625

还有Python的GMP库(GMPY),虽然不是纯Python编写,但可能更加高效。


谢谢。SymPy的有理数很好,但与库的其他部分有些过于交织在一起。 - Constantin

3

还有一件可以尝试的事情是从Python 2.5维护分支中的演示文件夹中获取Rat.py。如果我理解正确,它是2.6 fractions的“父亲”。它是一个没有依赖关系的单个模块。

>>> from Rat import rat
>>> rat(1) / rat(3)
Rat(1,3)
>>> rat(1, 3) ** 2
Rat(1,9)
更新:我的任务中,fractions.py快了大约2.5倍。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接