zoukankan      html  css  js  c++  java
  • fractions模块

    fractions模块

    fractions模块提供了分数类型的支持。


    Fraction类

    该类是fractions模块的核心,它继承了numbers.Rational类并且实现了该类所有的方法。

    构造函数并不复杂:

    class fractions.Fraction(numerator=0, denominator=1)
    class fractions.Fraction(int|float|str|Decimal|Fraction)

    可以同时提供分子(numerator)和分母(denominator)给构造函数用于实例化Fraction类,但两者必须同时是int类型或者numbers.Rational类型,否则会抛出类型错误。当分母为0,初始化的时候会导致抛出异常ZeroDivisionError。

    而如果只提供一个参数,则可以用上述五种类型进行初始化。当使用字符串进行初始化时,fractions模块使用内置的正则表达式进行匹配。而使用浮点数或者Decimal进行初始化时,fractions模块会在内部调用as_integer_ratio()。

    下面的代码示例来自官方文档,展示了各种实例化Fraction的方式:

    >>> 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 	
    ')
    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)

    限制分母

    fractions.Fraction.limit_denominator(max_denominator=1000000)

    有时候将浮点数或者Decimal作为Fraction实例的初始化数据可能会遇到舍入误差的问题,如上面调用Fraction(1.1)时不返回Fraction(11, 10)的例子。这时Fraction类提供了一个实例方法limit_denominator()用于减小这种误差。这个方法本来是为了通过限制分母来得到一个近似值,但是在出现舍入误差的时候反倒使得结果更加精确了,如下面的例子:

    >>> from fractions import Fraction
    >>> Fraction(1.1)
    Fraction(2476979795053773, 2251799813685248)
    >>> Fraction(1.1).limit_denominator()
    Fraction(11, 10)

    将Fraction用于算术运算、关系运算和其他多种操作

    上面提到,Fraction类继承了numbers.Rational类并且实现了该类所有的方法。所以Fraction类事实上通过重载很多特殊函数,使得其实例可以直接用于多种算术运算。

    不仅支持算术运算,Fraction类同时也支持关系运算、pickle模块、copy模块和哈希值的计算。

    >>> from fractions import Fraction
    >>> x = Fraction(1, 2)
    >>> y = Fraction(1, 3)
    >>> x + y
    Fraction(5, 6)
    >>> x - y
    Fraction(1, 6)
    >>> x * y
    Fraction(1, 6)
    >>> x / y
    Fraction(3, 2)
    >>> x ** 2
    Fraction(1, 4)
    >>> -x
    Fraction(-1, 2)
    >>> abs(x)
    Fraction(1, 2)
    >>> round(x)
    0
    >>> import math
    >>> math.floor(x)
    0
    >>> math.ceil(x)
    1
    >>> x == y
    False
    >>> x > y
    True

    其他函数

    fractions.Fraction.from_float(flt)
    fractions.Fraction.from_decimal(dec)

    在Python3.2之前,Fraction类不支持通过将浮点数和Decimal传入构造方法来获得实例。而是提供了上面两个类方法,通过调用类方法的方式来产生实例,目前版本(Python 3.6.1)这两个类方法仍然存在。


    fractions.gcd(a, b)

    用于计算最大公约数。这个函数在Python3.5之后就废弃了,官方建议使用math.gcd()。


    总结

    没啥要总结的…只能说Python太方便了…对了,这篇博客其实也是个挖了挺久的坑了,之前里面有一部分源码没看懂所以一直没发上来。哈哈,后面这个标准库学习的系列还是会一直更下去的!

  • 相关阅读:
    angularJS 修改操作select回显选中的数据
    zkteco iface702 中控考勤机java开发步骤二---获取考勤机 的考勤数据
    zkteco iface702 中控考勤机java开发步骤一---连接考勤机
    JQuery的分页插件pagination.js
    Ajax跨域后台处理
    发送邮箱工具类--阿里企业邮箱群发
    kindeditor-4.1.10 ---文件上传
    导出excel表格
    算法
    Arrays类——Arrays.asList()方法使用
  • 原文地址:https://www.cnblogs.com/lincappu/p/13535819.html
Copyright © 2011-2022 走看看