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

Python 增强提案

PEP 239 – 为 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 已被拒绝。

×

理由部分中概述的需求在某种程度上已通过 PEP 327 中的十进制算术的接受得到了解决。Guido 还指出,“在 ABC 中,有理数算术是默认的‘精确’算术,但它并没有按预期工作”。请参阅 2005 年 6 月 17 日的 python-dev 讨论 [1]

附录: 随着 PEP 3141,“数字类型层次结构”的接受,添加了“Rational”数字抽象基类,并在“fractions”模块中提供了具体实现。

摘要

Python 没有具有无限精度有理数语义的数字类型。本提案解释了这种类型的语义,并建议使用内建函数和字面量来支持这种类型。该 PEP 没有建议有理数的字面量;这将留待 另一个 PEP 处理。

理由

尽管有理数算术有时速度较慢且占用更多内存(通常,是无限的),但它更接近数学上的理想数字,并且往往具有对新手来说不太令人惊讶的行为。虽然已经编写了许多 Python 有理数实现,但它们都不存在于核心代码中,也没有任何文档。这使得那些不太精通 Python 的人难以访问它们。

有理数类型

将添加一个新的数字类型,名为 RationalType。它的单目运算符将执行显而易见的操作。二元运算符将整数和长整数强制转换为有理数,并将有理数强制转换为浮点数和复数。

将支持以下属性:.numerator.denominator。语言定义将承诺

r.denominator * r == r.numerator

分子和分母的最大公约数为 1,并且分母为正。

方法 r.trim(max_denominator) 将返回最接近 r 的有理数 s,使得 abs(s.denominator) <= max_denominator

rational() 内建函数

该函数将具有以下签名:rational(n, d=1)nd 必须是整数、长整数或有理数。保证

rational(n, d) * d == n

待解决问题

  • 也许该类型应该称为 rat 而不是 rational。有人提议我们将“抽象”的纯数学类型命名为 complex、real、rational、integer,并将“具体”的表示类型命名为 float、rat、long、int。
  • 是否允许具有整数值的有理数作为序列索引?例如,s[5/3 - 2/3] 是否等效于 s[1]
  • 是否允许对有理数使用 shiftmask 运算符?对于具有整数值的有理数?
  • Marcin ‘Qrczak’ Kowalczyk 在 c.l.py 上很好地总结了将整数与有理数统一的理由。

    将整数与有理数统一的理由

    • 由于 2 == 2/1,并且可能 str(2/1) == '2',因此它减少了对象看起来相等但行为不同的意外情况。
    • / 可以自由地用于整数除法,当我知道没有余数时(如果我错了,并且存在余数,那么之后可能会出现一些异常)。

    反对的理由

    • 当我将 / 的结果用作序列索引时,通常这是一个错误,不应该通过使程序对某些数据工作来隐藏它,因为它会对其他数据产生错误。
    • (假设在统一 int 和 rational 后,它们将成为不同的类型:)类型很少依赖于值。当变量的类型已知时,推理起来更容易:我知道如何使用它。我可以确定某事物是 int,并期望在此处使用的其他对象也是 int。
    • (假设它们的类型相同:)Int 本身就是一个很好的类型,不应该与有理数混合。某事物是整数的事实应该可以用关于其类型的语句来表达。许多操作需要 int,并且不接受有理数。自然地将它们视为不同类型。

参考


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

上次修改时间: 2024 年 4 月 14 日 20:08:31 GMT