栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么在Python 3中str(float)返回的位数要比Python 2多?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在Python 3中str(float)返回的位数要比Python 2多?

不,没有PEP。错误跟踪器中有一个问题,Python开发人员邮件列表中有相关的讨论。尽管我负责提出和实施更改,但我不能断言这是我的主意:它是在EuroPython
2010上与Guido进行对话时产生的。

更多详细信息:正如注释中已经提到的那样,Python 3.1引入了一个用于

repr
float字符串的新算法(后来反向移植到Python
2系列,因此它也出现在Python
2.7中)。这种新算法的结果是,在提示符下键入的“短”十进制数字具有相应的短表示形式。这消除之间的差额现有的原因之一
str
,并
repr
,并有可能使用相同的算法都
str
repr
。因此对于Python
3.2,下面的讨论与上面链接在一起,
str
并且
repr
变得相同。至于原因:它使语言更小,更整洁,并且在输出字符串时消除了任意选择的12位数字。(选择的17位数字用于
repr

顺便说一句,在2.7之前的Python版本中,绝不是任意的:两个不同的IEEE 754
binary64浮点数在转换为带有17个有效数字的十进制时将具有不同的表示形式,而17是具有此属性的最小整数。)

除了简单之外,还有一些不太明显的好处。过去让用户感到困惑的

repr
vs
str
区分的一个方面是
repr
自动在容器中使用的事实。因此,例如在Python
2.7中:

>>> x = 1.4 * 1.5>>> print x2.1>>> print [x][2.0999999999999996]

我敢肯定至少有一个StackOverflow问题在某处询问此现象:这是一个这样的问题,另一个是最近的问题。通过Python
3.2中引入的简化,我们得到的是:

>>> x = 1.4 * 1.5>>> print(x)2.0999999999999996>>> print([x])[2.0999999999999996]

至少更加一致。

如果您确实希望能够隐藏不精确的地方,那么正确的做法将保持不变:使用字符串格式来精确控制输出格式。

>>> print("{:.12g}".format(x))2.1

我希望这可以解释该更改背后的一些原因。我不会争辩说这是普遍有益的:正如您所指出的那样,旧

str
有隐藏隐藏错误的便利副作用。但是我认为(当然,我有偏见),它确实有助于消除该语言带来的一些惊喜。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611860.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号