A few months ago, there was an active discussion on edu-sig regarding<br>the proposed fate of raw_input().&nbsp; The text below is an attempt at<br>summarizing the discussion in the form of a tentative PEP.<br>It is respectfully submitted for your consideration.
<br><br>If it is to be considered, in some form, as an official PEP, I have<br>absolutely no objection for a regular python-dev contributor to take over the<br>ownership/authorship.<br><br>André Roberge<br><br>-----------------------------------------------------------------
<br>PEP: XXX<br>Title: Simple input built-in in Python 3000<br>Version: $Revision: 0.2 $<br>Last-Modified: $Date: 2006/12/22 10:00:00 $<br>Author: André Roberge &lt;andre.roberge at <a href="http://gmail.com">gmail.com</a>
&gt;<br>Status: Draft<br>Type: Standards Track<br>Content-Type: text/x-rst<br>Created: 13-Sep-2006<br>Python-Version: 3.0<br>Post-History:<br><br>Abstract<br>========<br><br>Input and output are core features of computer programs.&nbsp; Currently,
<br>Python provides a simple means of output through the print keyword<br>and two simple means of interactive input through the input() <br>and raw_input() built-in functions.<br><br>Python 3.0 will introduces various incompatible changes with previous
<br>Python versions[1].&nbsp; Among the proposed changes, print will become a built-in<br>function, print(), while input() and raw_input() would be removed completely<br>from the built-in namespace, requiring importing some module to provide
<br>even the most basic input capability.<br><br>This PEP proposes that Python 3.0 retains some simple interactive user <br>input capability, equivalent to raw_input(), within the built-in namespace.<br><br>Motivation<br>
==========<br><br>With its easy readability and its support for many programming styles<br>(e.g. procedural, object-oriented, etc.) among others, Python is perhaps<br>the best computer language to use in introductory programming classes.
<br>Simple programs often need to provide information to the user (output) <br>and to obtain information from the user (interactive input).<br>Any computer language intended to be used in an educational setting should<br>
provide straightforward methods for both output and interactive input.<br><br>The current proposals for Python 3.0 [1] include a simple output pathway<br>via a built-in function named print(), but a more complicated method for
<br>input [e.g. via sys.stdin.readline()], one that requires importing an external<br>module.&nbsp; Current versions of Python (pre-3.0) include raw_input() as a <br>built-in function.&nbsp; With the availability of such a function, programs that
<br>require simple input/output can be written from day one, without requiring<br>discussions of importing modules, streams, etc.<br><br>Rationale<br>=========<br><br>Current built-in functions, like input() and raw_input(), are found to be
<br>extremely useful in traditional teaching settings. (For more details,<br>see [2] and the discussion that followed.)&nbsp; <br>While the BDFL has clearly stated [3] that input() was not to be kept in <br>Python 3000, he has also stated that he was not against revising the 
<br>decision of killing raw_input().<br><br>raw_input() provides a simple mean to ask a question and obtain a response<br>from a user.&nbsp; The proposed plans for Python 3.0 would require the replacement<br>of the single statement
<br><br>name = raw_input(&quot;What is your name?&quot;)<br><br>by the more complicated<br><br>import sys<br>print(&quot;What is your name?&quot;)<br>same = sys.stdin.readline()<br><br>However, from the point of view of many Python beginners and educators, the
<br>use of sys.stdin.readline() presents the following problems:<br><br>1. Compared to the name &quot;raw_input&quot;, the name &quot;sys.stdin.readline()&quot; <br>is clunky and inelegant.<br><br>2. The names &quot;sys&quot; and &quot;stdin&quot; have no meaning for most beginners, 
<br>who are mainly interested in *what* the function does, and not *where* <br>in the package structure it is located.&nbsp; The lack of meaning also makes <br>it difficult to remember: <br>is it &quot;sys.stdin.readline()&quot;, or &quot;
stdin.sys.readline()&quot;?&nbsp; <br>To a programming novice, there is not any obvious reason to prefer <br>one over the other. In contrast, functions simple and direct names like <br>print, input, and raw_input, and open are easier to remember.
<br><br>3. The use of &quot;.&quot; notation is unmotivated and confusing to many beginners.&nbsp; <br>For example, it may lead some beginners to think &quot;.&quot;&nbsp; is a standard <br>character that could be used in any identifier.
<br><br>4. There is an asymmetry with the print function: why is print not called <br>sys.stdout.print()?<br><br><br>Specification<br>=============<br><br>The built-in input function should be totally equivalent to the existing
<br>raw_input() function.<br><br>Open issues<br>===========<br><br>With input() effectively removed from the language, the name raw_input()<br>makes much less sense and alternatives should be considered.&nbsp; The<br>various possibilities mentioned in various forums include:
<br><br>ask()<br>ask_user()<br>get_string()<br>input()&nbsp; # rejected by BDFL<br>prompt()<br>read()<br>user_input()<br>get_response()<br><br>While it has bee rejected by the BDFL, it has been suggested that the most <br>direct solution would be to rename &quot;raw_input&quot; to &quot;input&quot; in Python 3000.&nbsp; 
<br>The main objection is that Python 2.x already has a function named &quot;input&quot;, <br>and, even though it is not going to be included in Python 3000, <br>having a built-in function with the same name but different semantics may 
<br>confuse programmers migrating from 2.x to 3000.&nbsp; Certainly, this is no problem<br>for beginners, and the scope of the problem is unclear for more experienced <br>programmers, since raw_input(), while popular with many, is not in 
<br>universal use.&nbsp; In this instance, the good it does for beginners could be <br>seen to outweigh the harm it does to experienced programmers - <br>although it could cause confusion for people reading older books or tutorials.
<br><br><br>References<br>==========<br><br>.. [1] PEP 3100, Miscellaneous Python 3.0 Plans, Kuchling, Cannon<br>(<a href="http://www.python.org/dev/peps/pep-3100/">http://www.python.org/dev/peps/pep-3100/</a>)<br>.. [2] The fate of raw_input() in Python 3000
<br>(<a href="http://mail.python.org/pipermail/edu-sig/2006-September/006967.html">http://mail.python.org/pipermail/edu-sig/2006-September/006967.html</a>)<br>.. [3] Educational aspects of Python 3000<br>(<a href="http://mail.python.org/pipermail/python-3000/2006-September/003589.html">
http://mail.python.org/pipermail/python-3000/2006-September/003589.html</a>)<br><br><br>Copyright<br>=========<br><br>This document has been placed in the public domain.<br>