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

Python 개선 제안 한국어 번역

PEP 3111 – Python 3000의 간단한 입력 내장 함수

Author:
Andre Roberge <andre.roberge at gmail.com>
Status:
Final
Type:
Standards Track
Created:
13-Sep-2006
Python-Version:
3.0
Post-History:
22-Dec-2006

Table of Contents

번역·라이선스 안내

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

초록

입력과 출력은 컴퓨터 프로그램의 핵심 기능입니다. 현재 Python은 print 키워드를 통한 간단한 출력 수단과 input() 및 raw_input() 내장 함수를 통한 두 가지 간단한 대화형 입력 수단을 제공합니다.

Python 3.0은 이전 Python 버전과 호환되지 않는 다양한 변경 사항을 도입할 예정입니다(PEP 3100). 제안된 변경 사항 중에서 print는 내장 함수 print()가 되는 반면, input()과 raw_input()은 내장 네임스페이스에서 완전히 제거되어, 가장 기본적인 입력 기능조차 사용하려면 어떤 모듈을 임포트해야 합니다.

이 PEP는 Python 3.0이 raw_input()에 해당하는 간단한 대화형 사용자 입력 기능을 내장 네임스페이스 안에 유지할 것을 제안합니다.

이 PEP는 2006년 12월에 BDFL에 의해 승인되었습니다 [5].

동기

Python은 읽기 쉽고 여러 프로그래밍 스타일(예: 절차적, 객체 지향 등)을 지원하는 등의 장점 덕분에, 아마도 입문 프로그래밍 수업에서 사용하기에 가장 좋은 컴퓨터 언어일 것입니다. 간단한 프로그램은 사용자에게 정보를 제공하고(출력) 사용자로부터 정보를 얻어야 하는(대화형 입력) 경우가 많습니다. 교육 환경에서 사용하도록 의도된 컴퓨터 언어라면 출력과 대화형 입력 모두에 대해 간단명료한 방법을 제공해야 합니다.

Python 3.0에 대한 현재 제안에는 print()라는 내장 함수를 통한 간단한 출력 경로가 포함되어 있지만, 입력에 대해서는 외부 모듈을 임포트해야 하는 더 복잡한 방법[예: sys.stdin.readline()을 통한 방법]이 포함되어 있습니다. 현재 버전의 Python(3.0 이전)에는 raw_input()이 내장 함수로 포함되어 있습니다. 이러한 함수를 사용할 수 있으면, 모듈 임포트, 스트림 등에 대한 논의 없이도 간단한 입출력이 필요한 프로그램을 첫날부터 작성할 수 있습니다.

근거

input()이나 raw_input() 같은 현재의 내장 함수는 전통적인 교육 환경에서 매우 유용한 것으로 확인되었습니다. (자세한 내용은 [2] 및 그에 이어진 논의를 참고하십시오.) BDFL은 input()을 Python 3000에 유지하지 않겠다고 분명히 밝혔지만 [3], raw_input()을 없애기로 한 결정을 재검토하는 데에는 반대하지 않는다고도 밝혔습니다.

raw_input()은 질문을 하고 사용자로부터 응답을 얻는 간단한 수단을 제공합니다. Python 3.0에 대해 제안된 계획에 따르면 다음의 단일 문장을:

name = raw_input("What is your name?")

다음과 같이 더 복잡한 코드로 바꿔야 합니다.:

import sys
print("What is your name?")
same = sys.stdin.readline()

그러나 많은 Python 초보자와 교육자의 관점에서 볼 때, sys.stdin.readline()을 사용하면 다음과 같은 문제가 생깁니다.

1. “raw_input”이라는 이름에 비해 “sys.stdin.readline()”이라는 이름은 투박하고 우아하지 않습니다.

2. “sys”와 “stdin”이라는 이름은 대부분의 초보자에게 아무 의미가 없습니다. 초보자는 주로 함수가 무엇을 하는지에 관심이 있지, 함수가 패키지 구조의 어디에 있는지에는 관심이 없습니다. 또한 의미가 없기 때문에 기억하기도 어렵습니다. “sys.stdin.readline()”입니까, 아니면 “ stdin.sys.readline()”입니까? 프로그래밍 초보자에게는 둘 중 어느 하나를 선호할 명백한 이유가 전혀 없습니다. 반면에 print, input, raw_input, open처럼 간단하고 직접적인 이름을 가진 함수는 기억하기가 더 쉽습니다.

3. “.” 표기법의 사용은 많은 초보자에게 필연성이 없어 보이고 혼란스럽습니다. 예를 들어, 일부 초보자는 “.”이 어떤 식별자에든 사용할 수 있는 표준 문자라고 생각하게 될 수도 있습니다.

4. print 함수와 비대칭이 생깁니다. 왜 print는 sys.stdout.print()라고 부르지 않습니까?

명세

기존 raw_input() 함수의 이름은 input()으로 바뀝니다.

Python 2에서 3으로 변환하는 도구는 input() 호출을 eval(input())으로, raw_input() 호출을 input()으로 바꿉니다.

이름에 관한 논의

input()이 사실상 언어에서 제거되면 raw_input()이라는 이름은 훨씬 어색해지므로 다른 이름을 고려해야 합니다. 여러 포럼에서 언급된 다양한 후보는 다음과 같습니다.:

ask()
ask_user()
get_string()
input()  # initially rejected by BDFL, later accepted
prompt()
read()
user_input()
get_response()

처음에는 BDFL이 거부했지만, 가장 직접적인 해결책은 Python 3000에서 “raw_input”의 이름을 “input”으로 바꾸는 것이라는 제안이 있었습니다. 주된 반대 이유는 Python 2.x에 이미 “input”이라는 함수가 있다는 점입니다. 이 함수가 Python 3000에는 포함되지 않더라도, 이름은 같지만 의미가 다른 내장 함수가 있으면 2.x에서 3000으로 옮겨 가는 프로그래머가 혼란을 겪을 수 있습니다. 물론 초보자에게는 전혀 문제가 되지 않습니다. 더 숙련된 프로그래머에게 이 문제가 얼마나 클지는 분명하지 않은데, raw_input()이 많은 사람에게 인기가 있기는 하지만 모두가 쓰는 것은 아니기 때문입니다. 이 경우에는 초보자에게 주는 이점이 숙련된 프로그래머에게 주는 불편보다 크다고 볼 수 있습니다. 다만 오래된 책이나 튜토리얼을 읽는 사람에게는 혼란을 줄 수 있습니다.

이름 변경을 받아들인 근거는 여기 [4]에서 확인할 수 있습니다.

참고 문헌