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의 바로 왼쪽에 나타날 수 있으며, 이때 V 뒤에는 I가 오지 않아야 하고, 리터럴의 값에 4를 더합니다.
  5. 마찬가지로 I 하나가 마지막 X 앞에 나타날 수 있으며, 이때 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을 위반하므로 해당 코드는 이미 잘못된 것이며, 단지 예외를 발생시키지 않았을 뿐입니다. 이 제안은 언어에서 간과되었던 그 부분을 바로잡습니다.