Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 240 – 向 Python 添加有理数字面量

作者:
Christopher A. Craig <python-pep at ccraig.org>,Moshe Zadka <moshez at zadka.site.co.il>
状态:
已拒绝
类型:
标准轨迹
创建:
2001年3月11日
Python 版本:
2.2
历史记录:
2001年3月16日

目录

摘要

一个不同的 PEP建议向 Python 添加内置的有理数类型。此 PEP 建议将 Python 中的 ddd.ddd 浮点数字面量更改为有理数,并修改非整数除法以返回它。

BDFL 声明

此 PEP 已被拒绝。基本原理部分中概述的需求已在一定程度上通过接受PEP 327进行十进制运算得到解决。Guido 还指出,“有理数运算是在 ABC 中默认的“精确”运算,但结果并非如预期”。请参阅 2005 年 6 月 17 日的 python-dev 讨论[1]

基本原理

有理数对于精确且不出乎意料的算术运算很有用。它们给出了人们在各种数学课程中所学到的正确结果。使“明显”的非整数类型具有更可预测的语义,这比使用浮点数更能减少新程序员的意外。正如 c.l.py 和tutor@python.org 上的许多帖子所示,人们经常会遇到浮点数的奇怪语义:例如,round(0.98, 2)仍然给出 0.97999999999999998。

提案

符合正则表达式 '\d*.\d*' 的字面量将是有理数。

向后兼容性

唯一向后兼容的问题是上面提到的字面量的类型。建议进行以下迁移

  1. 批准后的下一个 Python 版本将允许 from __future__ import rational_literals 使所有此类字面量都被视为有理数。
  2. Python 3.0 将在默认情况下启用一个关于此类字面量的警告,前提是没有 __future__ 语句。警告消息将包含有关 __future__ 语句的信息,并指示要获取浮点数字面量,应在其后附加“e0”。
  3. Python 3.1 将默认情况下禁用此警告。此警告将保留 24 个月,在此期间,字面量将是有理数,并且警告将被删除。

常见异议

有理数速度慢且内存占用大!(放松,我并没有移除浮点数,我只是添加了两个字符。 1e0 仍然是浮点数)

有理数必须以十进制浮点数的形式呈现,否则对于期望十进制数的用户来说将非常糟糕(即 str(.5) 应该返回 '.5' 而不是 '1/2')。这意味着许多有理数必须在某个点被截断,这给我们带来了新的精度损失。

参考文献


来源:https://github.com/python/peps/blob/main/peps/pep-0240.rst

上次修改时间:2023年9月9日 17:39:29 格林尼治标准时间