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

Python 개선 제안 한국어 번역

PEP 240 – Python에 유리수 리터럴 추가하기

Author:
Christopher A. Craig <python-pep at ccraig.org>, Moshe Zadka <moshez at zadka.site.co.il>
Status:
Rejected
Type:
Standards Track
Created:
11-Mar-2001
Python-Version:
2.2
Post-History:
16-Mar-2001

Table of Contents

번역·라이선스 안내

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

초록

다른 PEP는 Python에 내장 유리수 타입을 추가할 것을 제안합니다. 이 PEP는 Python에서 ddd.ddd 형태의 부동소수점 리터럴을 유리수로 바꾸고, 정수가 아닌 나눗셈이 유리수를 반환하도록 수정할 것을 제안합니다.

BDFL 선언

이 PEP는 거부되었습니다. 근거 절에서 설명한 요구 사항은 십진 산술을 위한 PEP 327이 채택되면서 어느 정도 해결되었습니다. Guido는 또한 “유리수 산술은 ABC에서 기본 ‘정확한’ 산술이었지만 기대한 대로 잘 작동하지 않았다”라고 언급했습니다. 2005년 6월 17일의 python-dev 논의를 참조하십시오 [1].

근거

유리수는 정확하고 예상을 벗어나지 않는 산술에 유용합니다. 유리수는 사람들이 여러 수학 수업에서 배운 올바른 결과를 제공합니다. “당연한” 비정수 타입을 의미가 더 예측 가능한 타입으로 만들면, 부동소수점 수를 사용할 때보다 새로 입문한 프로그래머를 덜 놀라게 할 것입니다. c.l.py와 tutor@python.org 메일링 리스트에 올라온 꽤 많은 글에서 드러났듯이, 사람들은 부동소수점 수의 이상한 의미 때문에 자주 곤란을 겪습니다. 예를 들어 round(0.98, 2)는 여전히 0.97999999999999998을 반환합니다.

제안

정규 표현식 '\d*.\d*'에 부합하는 리터럴은 유리수가 됩니다.

하위 호환성

유일한 하위 호환성 문제는 위에서 언급한 리터럴의 타입입니다. 다음과 같은 이행 방안을 제안합니다:

  1. 승인 이후의 다음 Python은 from __future__ import rational_literals를 통해 그러한 모든 리터럴이 유리수로 취급되도록 할 수 있게 합니다.
  2. Python 3.0에서는 __future__ 문이 없는 경우 그러한 리터럴에 대해 기본으로 켜진 경고가 발생합니다. 경고 메시지에는 __future__ 문에 대한 정보가 포함되며, 부동소수점 리터럴을 얻으려면 리터럴 뒤에 “e0”을 붙여야 한다는 안내가 담깁니다.
  3. Python 3.1에서는 이 경고가 기본으로 꺼집니다. 이 경고는 24개월 동안 유지되며, 그 시점에 해당 리터럴은 유리수가 되고 경고는 제거됩니다.

흔한 반론

유리수는 느리고 메모리를 많이 사용합니다! (진정하십시오. 저는 float를 없애려는 것이 아니라 문자 두 개를 더 붙이려는 것뿐입니다. 1e0은 여전히 float입니다)

유리수는 십진 float 형태로 표시되어야 하며, 그렇지 않으면 십진수를 기대하는 사용자에게 끔찍할 것입니다(즉, str(.5)는 '1/2'가 아니라 '.5'를 반환해야 합니다). 이는 많은 유리수를 어느 시점에서는 잘라내야 한다는 뜻이며, 이로 인해 새로운 정밀도 손실이 생깁니다.

참고 문헌