uTools-Manuals/docs/python/fractions.html
2019-04-21 11:50:48 +08:00

39 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="module-fractions"><h1><span class="yiyi-st" id="yiyi-10">9.5. <a class="reference internal" href="#module-fractions" title="fractions: Rational numbers."><code class="xref py py-mod docutils literal"><span class="pre">fractions</span></code></a> - 有理数</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/fractions.py">Lib/fractions.py</a></span></p><p><span class="yiyi-st" id="yiyi-12"><a class="reference internal" href="#module-fractions" title="fractions: Rational numbers."><code class="xref py py-mod docutils literal"><span class="pre">fractions</span></code></a>模块提供对有理数运算的支持。</span></p><p><span class="yiyi-st" id="yiyi-13">Fraction实例可以从一对整数从另一个有理数或从字符串构造。</span></p><dl class="class"><dt id="fractions.Fraction"><span class="yiyi-st" id="yiyi-14"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>numerator=0</em>, <em>denominator=1</em><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-15"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>other_fraction</em><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-16"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>float</em><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-17"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>decimal</em><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-18"><em class="property">class </em><code class="descclassname">fractions.</code><code class="descname">Fraction</code><span class="sig-paren">(</span><em>string</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-19">第一个版本要求<em>分子</em><em>分母</em><a class="reference internal" href="numbers.html#numbers.Rational" title="numbers.Rational"><code class="xref py py-class docutils literal"><span class="pre">numbers.Rational</span></code></a>的实例,并返回一个新的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a> <code class="docutils literal"><span class="pre">numerator/denominator</span></code></span><span class="yiyi-st" id="yiyi-20">如果<em>分母</em><code class="xref py py-const docutils literal"><span class="pre">0</span></code>,则引发<a class="reference internal" href="exceptions.html#ZeroDivisionError" title="ZeroDivisionError"><code class="xref py py-exc docutils literal"><span class="pre">ZeroDivisionError</span></code></a></span><span class="yiyi-st" id="yiyi-21">第二个版本要求<em>other_fraction</em><a class="reference internal" href="numbers.html#numbers.Rational" title="numbers.Rational"><code class="xref py py-class docutils literal"><span class="pre">numbers.Rational</span></code></a>的实例,并返回具有相同值的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例。</span><span class="yiyi-st" id="yiyi-22">接下来的两个版本接受<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a><a class="reference internal" href="decimal.html#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal"><span class="pre">decimal.Decimal</span></code></a>实例,并返回具有完全相同值的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例。</span><span class="yiyi-st" id="yiyi-23">注意,由于二进制浮点的常见问题(见<a class="reference internal" href="../tutorial/floatingpoint.html#tut-fp-issues"><span>Floating Point Arithmetic: Issues and Limitations</span></a><code class="docutils literal"><span class="pre">Fraction(1.1)</span></code>的参数不完全等于11 / 10因此<code class="docutils literal"><span class="pre">Fraction(1.1)</span></code><em></em>返回<code class="docutils literal"><span class="pre">分数11</span> <span class="pre">10</span> / t7&gt;</code></span><span class="yiyi-st" id="yiyi-24">(但请参阅下面的<a class="reference internal" href="#fractions.Fraction.limit_denominator" title="fractions.Fraction.limit_denominator"><code class="xref py py-meth docutils literal"><span class="pre">limit_denominator()</span></code></a>方法的文档。)</span><span class="yiyi-st" id="yiyi-25">最后一个版本的构造函数需要一个字符串或unicode实例。</span><span class="yiyi-st" id="yiyi-26">本实例的通常形式是:</span></p><pre><code class="language-python"><span></span><span class="p">[</span><span class="n">sign</span><span class="p">]</span> <span class="n">numerator</span> <span class="p">[</span><span class="s1">'/'</span> <span class="n">denominator</span><span class="p">]</span>
</code></pre><p><span class="yiyi-st" id="yiyi-27">其中可选的<code class="docutils literal"><span class="pre">sign</span></code>可以是'+'或' - '和<code class="docutils literal"><span class="pre">numerator</span></code><code class="docutils literal"><span class="pre">denominator</span></code>(如果存在)是十进制数字串。</span><span class="yiyi-st" id="yiyi-28">此外,<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a>构造函数接受的任何表示有限值的字符串也会被<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>构造函数接受。</span><span class="yiyi-st" id="yiyi-29">在任一形式中,输入字符串也可以具有前导和/或尾部空格。</span><span class="yiyi-st" id="yiyi-30">这里有些例子:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">fractions</span> <span class="k">import</span> <span class="n">Fraction</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="o">-</span><span class="mi">10</span><span class="p">)</span>
<span class="go">Fraction(-8, 5)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="mi">123</span><span class="p">)</span>
<span class="go">Fraction(123, 1)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">()</span>
<span class="go">Fraction(0, 1)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'3/7'</span><span class="p">)</span>
<span class="go">Fraction(3, 7)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">' -3/7 '</span><span class="p">)</span>
<span class="go">Fraction(-3, 7)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'1.414213 </span><span class="se">\t\n</span><span class="s1">'</span><span class="p">)</span>
<span class="go">Fraction(1414213, 1000000)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'-.125'</span><span class="p">)</span>
<span class="go">Fraction(-1, 8)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'7e-6'</span><span class="p">)</span>
<span class="go">Fraction(7, 1000000)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="mf">2.25</span><span class="p">)</span>
<span class="go">Fraction(9, 4)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="mf">1.1</span><span class="p">)</span>
<span class="go">Fraction(2476979795053773, 2251799813685248)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">decimal</span> <span class="k">import</span> <span class="n">Decimal</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'1.1'</span><span class="p">))</span>
<span class="go">Fraction(11, 10)</span>
</code></pre><p><span class="yiyi-st" id="yiyi-31"><a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>类继承自抽象基类<a class="reference internal" href="numbers.html#numbers.Rational" title="numbers.Rational"><code class="xref py py-class docutils literal"><span class="pre">numbers.Rational</span></code></a>,并实现该类的所有方法和操作。</span><span class="yiyi-st" id="yiyi-32"><a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例是可哈希的,应被视为不可变。</span><span class="yiyi-st" id="yiyi-33">此外,<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>具有以下属性和方法:</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-34"><span class="versionmodified">在版本3.2中更改:</span> <a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>构造函数现在接受<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a><a class="reference internal" href="decimal.html#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal"><span class="pre">decimal.Decimal</span></code></a>实例。</span></p></div><dl class="attribute"><dt id="fractions.Fraction.numerator"><span class="yiyi-st" id="yiyi-35"><code class="descname">numerator</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-36">最低分数的分数的分子。</span></p></dd></dl><dl class="attribute"><dt id="fractions.Fraction.denominator"><span class="yiyi-st" id="yiyi-37"><code class="descname">denominator</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-38">最低分数的分数的分母。</span></p></dd></dl><dl class="method"><dt id="fractions.Fraction.from_float"><span class="yiyi-st" id="yiyi-39"><code class="descname">from_float</code><span class="sig-paren">(</span><em>flt</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-40">此类方法构造表示<em>flt</em>的精确值的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>,其必须是<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a></span><span class="yiyi-st" id="yiyi-41">注意<code class="docutils literal"><span class="pre">Fraction.from_float(0.3)</span></code><code class="docutils literal"><span class="pre">分数3</span> <span class="pre">10</span></code>不同。</span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-42">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-43">从Python 3.2起,您还可以直接从<a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal"><span class="pre">float</span></code></a>构建<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例。</span></p></div></dd></dl><dl class="method"><dt id="fractions.Fraction.from_decimal"><span class="yiyi-st" id="yiyi-44"><code class="descname">from_decimal</code><span class="sig-paren">(</span><em>dec</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-45">此类方法构造表示<em>dec</em>的确切值的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>,其必须是<a class="reference internal" href="decimal.html#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal"><span class="pre">decimal.Decimal</span></code></a>实例。</span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-46">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-47">从Python 3.2起,您还可以直接从<a class="reference internal" href="decimal.html#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal"><span class="pre">decimal.Decimal</span></code></a>实例构建<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a>实例。</span></p></div></dd></dl><dl class="method"><dt id="fractions.Fraction.limit_denominator"><span class="yiyi-st" id="yiyi-48"><code class="descname">limit_denominator</code><span class="sig-paren">(</span><em>max_denominator=1000000</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-49">查找并返回最接近的具有分母max_denominator的<a class="reference internal" href="#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal"><span class="pre">Fraction</span></code></a><code class="docutils literal"><span class="pre">self</span></code></span><span class="yiyi-st" id="yiyi-50">此方法对于找到给定浮点数的有理近似很有用:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">fractions</span> <span class="k">import</span> <span class="n">Fraction</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="s1">'3.1415926535897932'</span><span class="p">)</span><span class="o">.</span><span class="n">limit_denominator</span><span class="p">(</span><span class="mi">1000</span><span class="p">)</span>
<span class="go">Fraction(355, 113)</span>
</code></pre><p><span class="yiyi-st" id="yiyi-51">或用于恢复表示为float的有理数</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">pi</span><span class="p">,</span> <span class="n">cos</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="n">cos</span><span class="p">(</span><span class="n">pi</span><span class="o">/</span><span class="mi">3</span><span class="p">))</span>
<span class="go">Fraction(4503599627370497, 9007199254740992)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="n">cos</span><span class="p">(</span><span class="n">pi</span><span class="o">/</span><span class="mi">3</span><span class="p">))</span><span class="o">.</span><span class="n">limit_denominator</span><span class="p">()</span>
<span class="go">Fraction(1, 2)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">Fraction</span><span class="p">(</span><span class="mf">1.1</span><span class="p">)</span><span class="o">.</span><span class="n">limit_denominator</span><span class="p">()</span>
<span class="go">Fraction(11, 10)</span>
</code></pre></dd></dl><dl class="method"><dt id="fractions.Fraction.__floor__"><span class="yiyi-st" id="yiyi-52"><code class="descname">__floor__</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-53">返回最大的<a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a> <code class="docutils literal"><span class="pre"> <span class="pre">self</span></span></code></span><span class="yiyi-st" id="yiyi-54">此方法也可以通过<a class="reference internal" href="math.html#math.floor" title="math.floor"><code class="xref py py-func docutils literal"><span class="pre">math.floor()</span></code></a>函数访问:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">floor</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">floor</span><span class="p">(</span><span class="n">Fraction</span><span class="p">(</span><span class="mi">355</span><span class="p">,</span> <span class="mi">113</span><span class="p">))</span>
<span class="go">3</span>
</code></pre></dd></dl><dl class="method"><dt id="fractions.Fraction.__ceil__"><span class="yiyi-st" id="yiyi-55"><code class="descname">__ceil__</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-56">返回最小的<a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a> <code class="docutils literal"><span class="pre">&gt; =</span> <span class="pre">self</span></code></span><span class="yiyi-st" id="yiyi-57">此方法也可以通过<a class="reference internal" href="math.html#math.ceil" title="math.ceil"><code class="xref py py-func docutils literal"><span class="pre">math.ceil()</span></code></a>函数访问。</span></p></dd></dl><dl class="method"><dt id="fractions.Fraction.__round__"><span class="yiyi-st" id="yiyi-58"><code class="descname">__round__</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dt><span class="yiyi-st" id="yiyi-59"><code class="descname">__round__</code><span class="sig-paren">(</span><em>ndigits</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-60">第一个版本将最近的<a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a>返回到<code class="docutils literal"><span class="pre">self</span></code>,将一半舍入到偶数。</span><span class="yiyi-st" id="yiyi-61">第二个版本将<code class="docutils literal"><span class="pre">self</span></code>舍入到最接近的<code class="docutils literal"><span class="pre">分数1</span> <span class="pre">10 ** ndigits</span></code>如果<code class="docutils literal"><span class="pre">ndigits</span></code>为负数),再次向偶数舍入一半。</span><span class="yiyi-st" id="yiyi-62">此方法也可以通过<a class="reference internal" href="functions.html#round" title="round"><code class="xref py py-func docutils literal"><span class="pre">round()</span></code></a>函数访问。</span></p></dd></dl></dd></dl><dl class="function"><dt id="fractions.gcd"><span class="yiyi-st" id="yiyi-63"><code class="descclassname">fractions.</code><code class="descname">gcd</code><span class="sig-paren">(</span><em>a</em>, <em>b</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-64">返回整数<em>a</em><em>b</em>的最大公约数。</span><span class="yiyi-st" id="yiyi-65">If either <em>a</em> or <em>b</em> is nonzero, then the absolute value of <code class="docutils literal"><span class="pre">gcd(a,</span> <span class="pre">b)</span></code> is the largest integer that divides both <em>a</em> and <em>b</em>. <code class="docutils literal"><span class="pre">gcd(a,b)</span></code> has the same sign as <em>b</em> if <em>b</em> is nonzero; otherwise it takes the sign of <em>a</em>. <code class="docutils literal"><span class="pre">gcd(0,</span> <span class="pre">0)</span></code> returns <code class="docutils literal"><span class="pre">0</span></code>.</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-66"><span class="versionmodified">自版本3.5后已弃用:</span>改用<a class="reference internal" href="math.html#math.gcd" title="math.gcd"><code class="xref py py-func docutils literal"><span class="pre">math.gcd()</span></code></a></span></p></div></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-67">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-68">模块<a class="reference internal" href="numbers.html#module-numbers" title="numbers: Numeric abstract base classes (Complex, Real, Integral, etc.)."><code class="xref py py-mod docutils literal"><span class="pre">numbers</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-69">构成数字塔的抽象基类。</span></dd></dl></div></div></div>