9.5. 分数-有理数

2.6 版的新Function。

源代码: Lib/fractions.py


fractions模块提供对有理数算术的支持。

分数实例可以由Pair整数,另一个有理数或字符串构造。

  • 类别 fractions. Fraction(*分子= 0 *,*分母= 1 *)

  • 类别 fractions. Fraction(其他分数)

    • class * fractions. Fraction(* float *)
  • 类别 fractions. Fraction(十进制)

  • 类别 fractions. Fraction(字符串)

    • 第一个版本要求* numerator denominator numbers.Rational的实例,并返回值numerator/denominator的新Fraction实例。如果 denominator 0,它将引发ZeroDivisionError。第二个版本要求 other_fraction numbers.Rational的实例,并返回具有相同值的Fraction实例。接下来的两个版本接受floatdecimal.Decimal实例,并返回具有完全相同值的Fraction实例。请注意,由于二进制浮点数的常见问题(请参见浮点算法:问题和局限性),Fraction(1.1)的参数并不完全等于 11/10,因此Fraction(1.1)不会不会*返回Fraction(11, 10)。 (但是请参见下面的limit_denominator()方法的文档。)构造函数的最新版本需要字符串或 unicode 实例。此实例的通常形式为:
[sign] numerator ['/' denominator]

其中可选的sign可以是''或'-',而numeratordenominator(如果存在)是十进制数字的字符串。此外,float构造函数接受的表示有限值的任何字符串也将被Fraction构造函数接受。任一种形式的 Importing 字符串也可以具有前导和/或尾随空格。这里有些例子:

>>> from fractions import Fraction
>>> Fraction(16, -10)
Fraction(-8, 5)
>>> Fraction(123)
Fraction(123, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' -3/7 ')
Fraction(-3, 7)
>>> Fraction('1.414213 \t\n')
Fraction(1414213, 1000000)
>>> Fraction('-.125')
Fraction(-1, 8)
>>> Fraction('7e-6')
Fraction(7, 1000000)
>>> Fraction(2.25)
Fraction(9, 4)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)

Fraction类继承自抽象 Base Classnumbers.Rational,并实现该类的所有方法和操作。 Fraction实例是可哈希的,应视为不可变的。此外,Fraction具有以下方法:

在 2.7 版中进行了更改:Fraction构造函数现在接受floatdecimal.Decimal实例。

  • from_float(* flt *)
    • 此类方法构造一个Fraction,表示* flt *的确切值,该值必须为float。注意Fraction.from_float(0.3)Fraction(3, 10)是不同的值。

Note

从 Python 2.7 起,您还可以直接从float构造一个Fraction实例。

  • from_decimal(* dec *)

Note

从 Python 2.7 起,您还可以直接从decimal.Decimal实例构造Fraction实例。

  • limit_denominator(* max_denominator = 1000000 *)
    • 查找并返回分母最大为 max_denominator 的最接近的Fractionself。此方法对于查找给定浮点数的有理逼近很有用:
>>> from fractions import Fraction
>>> Fraction('3.1415926535897932').limit_denominator(1000)
Fraction(355, 113)

或用于恢复表示为浮点数的有理数:

>>> from math import pi, cos
>>> Fraction(cos(pi/3))
Fraction(4503599627370497, 9007199254740992)
>>> Fraction(cos(pi/3)).limit_denominator()
Fraction(1, 2)
>>> Fraction(1.1).limit_denominator()
Fraction(11, 10)
  • fractions. gcd(* a b *)
    • 返回整数* a b 的最大公约数。如果 a b 都不为零,则gcd(a, b)的绝对值是除 a b 的最大整数。如果 b 非零,则gcd(a,b) b 具有相同的符号;否则采用 a *的符号。 gcd(0, 0)返回0

See also

  • Module numbers

  • 组成数字塔的抽象 Base Class。