前言

你可能不需要经常处理分数,但当你需要时,Python的Fraction类会给你很大的帮助。本文将给大家详细介绍关于利用标准库fractions模块让Python支持分数类型的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
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 \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)
限制分母
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太方便了…对了,这篇博客其实也是个挖了挺久的坑了,之前里面有一部分源码没看懂所以一直没发上来。哈哈,后面这个标准库学习的系列还是会一直更下去的!
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
参考资料:
https://docs.python.org/3.6/library/fractions.html
# python
# fractions模块
# fractions
# 分数
# python基础之基本运算符
# Python基本运算几何运算处理数字图像示例
# Python入门教程1. 基本运算【四则运算、变量、math模块等】
# Python 定义分数类实现其基本运算(示例代码)
# 浮点数
# 抛出
# 实现了
# 有一
# 是个
# 好了
# 给你
# 相关内容
# 说了
# 不多
# 当你
# 继承了
# 会在
# 这两个
# 可以直接
# 你可
# 详细介绍
# 不支持
# 这篇文章
# 这篇
相关文章:
如何配置WinSCP新建站点的密钥验证步骤?
c# 在ASP.NET Core中管理和取消后台任务
建站之星ASP如何实现CMS高效搭建与安全管理?
如何选择高效可靠的多用户建站源码资源?
如何选择高效稳定的ISP建站解决方案?
建站之星logo尺寸如何设置最合适?
简单实现Android验证码
*服务器网站为何频现安全漏洞?
linux top下的 minerd 木马清除方法
如何基于云服务器快速搭建个人网站?
如何在自有机房高效搭建专业网站?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
如何通过VPS搭建网站快速盈利?
Python文件管理规范_工程实践说明【指导】
浅析上传头像示例及其注意事项
如何在服务器上配置二级域名建站?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
建站之星后台密码如何安全设置与找回?
制作网站的模板软件,网站怎么建设?
电商网站制作价格怎么算,网上拍卖流程以及规则?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何有效防御Web建站篡改攻击?
如何在Golang中指定模块版本_使用go.mod控制版本号
宝塔新建站点为何无法访问?如何排查?
为什么Go需要go mod文件_Go go mod文件作用说明
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
中山网站制作网页,中山新生登记系统登记流程?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何设置并定期更换建站之星安全管理员密码?
电商网站制作公司有哪些,1688网是什么意思?
大同网页,大同瑞慈医院官网?
建站VPS配置与SEO优化指南:关键词排名提升策略
如何在IIS中新建站点并配置端口与物理路径?
宝塔建站助手安装配置与建站模板使用全流程解析
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
建站与域名管理如何高效结合?
宝塔面板创建网站无法访问?如何快速排查修复?
建站主机如何安装配置?新手必看操作指南
盐城做公司网站,江苏电子版退休证办理流程?
青岛网站建设如何选择本地服务器?
如何用wdcp快速搭建高效网站?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何快速搭建自助建站会员专属系统?
如何通过智能用户系统一键生成高效建站方案?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何在七牛云存储上搭建网站并设置自定义域名?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
C++如何使用std::optional?(处理可选值)
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
*请认真填写需求信息,我们会在24小时内与您取得联系。