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

Python 增强提案

PEP 313 – 向 Python 添加罗马数字字面量

作者:
Mike Meyer <mwm at mired.org>
状态:
已拒绝
类型:
标准跟踪
创建日期:
2003年4月1日
Python 版本:
2.4
发布历史:


目录

摘要

本PEP(也称为PEP CCCXIII)提议添加罗马数字作为一种字面量类型。它还提议新增内置函数“roman”,该函数将一个对象转换为整数,然后将该整数转换为与该整数等价的罗马数字字面量字符串。

BDFL 声明

本PEP被否决。尽管大多数Python用户认为这是一个“有则更好”的功能,但社区未能就九应该表示为现代形式的IX还是经典形式的VIIII达成共识。同样,关于MXM或MCMXC是否被视为1990的规范表示也未能达成一致。一小部分用户强烈要求支持小写罗马数字,以便用于(i)PowerPoint演示文稿、(ii)学术著作和(iii)Perl文档。

基本原理

罗马数字在许多领域都有使用,将它们作为字面量添加到Python中将使这些领域的计算变得更加容易。例如,超级碗用罗马数字计数,许多老电影的版权日期也用罗马数字。此外,LISP提供了罗马数字字面量包,因此将罗马数字添加到Python中将有助于缓解comp.lang.python有时出现的LISP羡慕情绪。此外,作者认为这是将他的名字写入PEP的最简单方法。

罗马数字字面量的语法

罗马数字字面量将由字符M、D、C、L、X、V和I组成,且只能是这些字符。它们必须大写,并根据以下规则表示一个整数:

  1. 除非另有说明,它们必须按M、D、C、L、X、V、I的顺序出现。每个字符的每次出现分别将1000、500、100、50、10、5和1添加到字面量的值中。
  2. 任何给定字面量中只能出现一个D、V或L。
  3. 任何给定字面量中,I、X和C最多可以连续出现三个。
  4. 一个单独的I可以紧靠单个V的左侧出现,其后没有I,并为字面量的值添加4。
  5. 一个单独的I同样可以出现在最后一个X之前,其后没有I或V,并为值添加9。
  6. X与L和C的关系如同I与V和X的关系,只是值分别为40和90。
  7. 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

最后修改:2025-02-01 08:59:27 GMT