PEP 313 – 在 Python 中添加罗马数字字面量
- 作者:
- Mike Meyer <mwm at mired.org>
- 状态:
- 已拒绝
- 类型:
- 标准跟踪
- 创建:
- 2003-04-01
- Python 版本:
- 2.4
- 历史记录:
摘要
本 PEP(也称为 PEP CCCXIII)建议添加罗马数字作为一种字面量类型。它还建议使用新的内置函数“roman”,该函数将对象转换为整数,然后将整数转换为字符串,该字符串是与整数等效的罗马数字字面量。
BDFL 宣告
此 PEP 已被拒绝。虽然大多数 Python 用户认为这是一个不错的功能,但社区无法就 9 应该表示为 IX(现代形式)还是 VIIII(经典形式)达成一致。同样,也没有就 MXM 或 MCMXC 是否被视为 1990 的有效表示达成一致。一小部分用户强烈要求支持小写数字,用于 (i) 幻灯片,(ii) 学术工作以及 (iii) Perl 文档。
基本原理
罗马数字在许多领域都有使用,将它们作为字面量添加到 Python 中将使这些领域的计算变得更加容易。例如,超级碗是使用罗马数字计数的,许多老电影的版权日期也使用罗马数字。此外,LISP 提供了一个罗马数字字面量包,因此在 Python 中添加罗马数字将有助于缓解 comp.lang.python 中有时出现的 LISP 羡慕。此外,作者认为这是让他的名字出现在 PEP 上的最简单方法。
罗马数字字面量的语法
罗马数字字面量将由字符 M、D、C、L、X、V 和 I 组成,仅限于这些字符。它们必须是大写的,并遵循以下规则表示整数
- 除了以下说明外,它们必须按顺序排列:M、D、C、L、X、V,然后是 I。每个字符的每个出现分别向字面量的值添加 1000、500、100、50、10、5 和 1。
- 在任何给定的字面量中,只能出现一个 D、V 或 L。
- 在任何给定的字面量中,最多可以连续出现三个 I、X 和 C。
- 一个单独的 I 可以出现在单个 V 的左侧,后面不跟任何 I,并为字面量的值添加 4。
- 一个单独的 I 同样可以出现在最后一个 X 之前,后面不跟任何 I 或 V,并添加 9。
- X 与 L 和 C 的关系与 I 与 V 和 X 的关系相同,只是它们的值分别为 40 和 90。
- C 与 D 和 M 的关系与 I 与 V 和 X 的关系相同,只是它们的值分别为 400 和 900。
任何完全由 M、D、C、L、X、V 和 I 字符组成的字面量,如果未遵循此格式,将引发语法错误,因为显式比隐式更好。
内置“roman”函数
新的内置函数“roman”将帮助将整数转换为罗马数字字面量。它将接受一个对象作为参数,并返回包含相同值的字面量的字符串。如果参数不是整数或有理数(参见 PEP 239),则它将通过现有的内置“int”传递以获取值。如果对象是浮点数,则这可能会导致信息丢失。如果对象是有理数,则结果将格式化为有理数字面量(参见 PEP 240),其中字符串中的整数为罗马数字字面量。
兼容性问题
本提案没有引入任何新的关键字。使用全部大写字母且仅包含字符 M、D、C、L、X、V 和 I 的变量名的程序将受到新字面量的影响。当这些变量被赋值时,这些程序现在将出现语法错误,而当这些变量在表达式中被引用时,将出现语法错误或细微的错误。由于此类变量名称违反了 PEP 8,因此代码已经损坏,只是没有生成异常。本提案纠正了语言中的这种疏忽。
版权
本文件已放置在公有领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0313.rst
最后修改时间:2023-09-09 17:39:29 GMT