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()과 동등한 간단한 대화형 사용자 입력 기능을 내장 네임스페이스 안에 유지할 것을 제안합니다.

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

동기

Python은 읽기 쉽고 절차적, 객체 지향적 등 다양한 프로그래밍 스타일을 지원하므로, 무엇보다 입문 프로그래밍 수업에서 사용하기에 아마도 가장 좋은 컴퓨터 언어입니다. 간단한 프로그램은 흔히 사용자에게 정보를 제공하고(출력), 사용자로부터 정보를 얻어야 합니다(대화형 입력). 교육 환경에서 사용하도록 의도된 모든 컴퓨터 언어는 출력과 대화형 입력 모두를 위한 직관적인 방법을 제공해야 합니다.

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

근거

input() 및 raw_input()과 같은 현재의 내장 함수는 전통적인 교육 환경에서 매우 유용한 것으로 밝혀졌습니다. (자세한 내용은 [2] 및 그에 뒤따른 논의를 참조하십시오.) BDFL은 [3]에서 input()을 Python 3000에 유지하지 않을 것이라고 명확히 밝혔지만, 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”이라는 이름은 대부분의 초보자에게 아무런 의미가 없습니다. 이들은 주로 함수가 what을 하는지가 아니라 패키지 구조에서 where에 위치하는지에 관심이 있습니다. 의미가 없다는 점은 기억하기도 어렵게 만듭니다. “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]에서 확인할 수 있습니다.

참고 자료