Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 313 – Python에 로마 숫자 리터럴 추가하기

Author:
Mike Meyer <mwm at mired.org>
Status:
Rejected
Type:
Standards Track
Created:
01-Apr-2003
Python-Version:
2.4
Post-History:


Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

개요

이 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 문자로만 구성됩니다. 대문자여야 하며, 다음 규칙에 따라 정수를 나타냅니다:

  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을 위반하므로, 해당 코드는 이미 잘못된 것이며, 다만 예외를 발생시키지 않고 있었을 뿐입니다. 이 제안은 언어에 있는 그 허점을 바로잡습니다.