PEP 3111 – Einfache Eingabe-Funktion in Python 3000
- Autor:
- Andre Roberge <andre.roberge at gmail.com>
- Status:
- Final
- Typ:
- Standards Track
- Erstellt:
- 13. Sep 2006
- Python-Version:
- 3.0
- Post-History:
- 22. Dez 2006
Inhaltsverzeichnis
Zusammenfassung
Ein- und Ausgabe sind Kernfunktionen von Computerprogrammen. Derzeit bietet Python eine einfache Möglichkeit der Ausgabe über das Schlüsselwort print und zwei einfache Möglichkeiten der interaktiven Eingabe über die integrierten Funktionen input() und raw_input().
Python 3.0 wird verschiedene inkompatible Änderungen zu früheren Python-Versionen einführen (PEP 3100). Unter den vorgeschlagenen Änderungen wird print zu einer integrierten Funktion, print(), während input() und raw_input() vollständig aus dem integrierten Namensraum entfernt werden sollen, was den Import eines Moduls erfordert, um selbst die grundlegendste Eingabefunktion bereitzustellen.
Dieser PEP schlägt vor, dass Python 3.0 eine einfache interaktive Benutzereingabefunktion, die der von raw_input() entspricht, im integrierten Namensraum beibehält.
Er wurde vom BDFL im Dezember 2006 akzeptiert [5].
Motivation
Mit seiner einfachen Lesbarkeit und seiner Unterstützung für viele Programmierstile (z. B. prozedural, objektorientiert usw.) unter anderem ist Python vielleicht die beste Computersprache für Einführungskurse in die Programmierung. Einfache Programme müssen oft Informationen an den Benutzer (Ausgabe) liefern und Informationen vom Benutzer erhalten (interaktive Eingabe). Jede Computersprache, die für den Einsatz im Bildungsbereich bestimmt ist, sollte unkomplizierte Methoden für Ausgabe und interaktive Eingabe bieten.
Die aktuellen Vorschläge für Python 3.0 beinhalten einen einfachen Ausgabeweg über eine integrierte Funktion namens print(), aber eine kompliziertere Methode für die Eingabe [z. B. über sys.stdin.readline()], die den Import eines externen Moduls erfordert. Aktuelle Versionen von Python (vor 3.0) enthalten raw_input() als integrierte Funktion. Mit der Verfügbarkeit einer solchen Funktion können Programme, die einfache Ein- und Ausgaben benötigen, vom ersten Tag an geschrieben werden, ohne Diskussionen über den Import von Modulen, Streams usw. erforderlich zu machen.
Begründung
Die aktuellen integrierten Funktionen wie input() und raw_input() erweisen sich in traditionellen Lehrsettings als äußerst nützlich. (Weitere Details finden Sie unter [2] und der anschließenden Diskussion.) Während der BDFL klar erklärt hat [3], dass input() nicht in Python 3000 beibehalten werden soll, hat er auch erklärt, dass er nicht dagegen sei, die Entscheidung zur Abschaffung von raw_input() zu überdenken.
raw_input() bietet eine einfache Möglichkeit, eine Frage zu stellen und eine Antwort vom Benutzer zu erhalten. Die vorgeschlagenen Pläne für Python 3.0 würden die Ersetzung der einzelnen Anweisung
name = raw_input("What is your name?")
durch die kompliziertere
import sys
print("What is your name?")
same = sys.stdin.readline()
erfordern. Aus Sicht vieler Python-Anfänger und -Lehrer birgt die Verwendung von sys.stdin.readline() jedoch die folgenden Probleme:
1. Im Vergleich zum Namen „raw_input“ ist der Name „sys.stdin.readline()“ sperrig und unschön.
2. Die Namen „sys“ und „stdin“ haben für die meisten Anfänger keine Bedeutung, die sich hauptsächlich dafür interessieren, *was* die Funktion tut und nicht, *wo* sie sich in der Paketstruktur befindet. Das Fehlen von Bedeutung macht es auch schwierig, sich daran zu erinnern: ist es „sys.stdin.readline()“ oder „stdin.sys.readline()“? Für einen Programmieranfänger gibt es keinen offensichtlichen Grund, das eine dem anderen vorzuziehen. Im Gegensatz dazu sind Funktionen mit einfachen und direkten Namen wie print, input und raw_input, und open leichter zu merken.
3. Die Verwendung der „.“-Notation ist für viele Anfänger unmotiviert und verwirrend. Zum Beispiel kann sie einige Anfänger dazu verleiten zu glauben, dass „.“ ein Standardzeichen ist, das in jedem Bezeichner verwendet werden könnte.
4. Es gibt eine Asymmetrie zur print-Funktion: Warum heißt print nicht sys.stdout.print()?
Spezifikation
Die vorhandene Funktion raw_input() wird in input() umbenannt.
Das Python 2-zu-3-Konvertierungstool ersetzt Aufrufe von input() durch eval(input()) und raw_input() durch input().
Diskussion über die Benennung
Da input() effektiv aus der Sprache entfernt wird, ergibt der Name raw_input() viel weniger Sinn, und Alternativen sollten in Betracht gezogen werden. Die verschiedenen in verschiedenen Foren erwähnten Möglichkeiten sind:
ask()
ask_user()
get_string()
input() # initially rejected by BDFL, later accepted
prompt()
read()
user_input()
get_response()
Obwohl es zunächst vom BDFL abgelehnt wurde, wurde vorgeschlagen, dass die direkteste Lösung darin bestünde, „raw_input“ in Python 3000 in „input“ umzubenennen. Der Haupteinwand ist, dass Python 2.x bereits eine Funktion namens „input“ hat, und obwohl sie nicht in Python 3000 enthalten sein wird, kann eine integrierte Funktion mit demselben Namen, aber unterschiedlicher Semantik, Programmierer verwirren, die von 2.x auf 3000 migrieren. Sicherlich ist dies kein Problem für Anfänger, und der Umfang des Problems ist für erfahrenere Programmierer unklar, da raw_input(), obwohl bei vielen beliebt, nicht universell eingesetzt wird. In diesem Fall könnte der Nutzen für Anfänger den Schaden für erfahrene Programmierer überwiegen – obwohl es zu Verwirrung bei Personen führen könnte, die ältere Bücher oder Tutorials lesen.
Die Begründung für die Annahme der Umbenennung finden Sie hier [4].
Referenzen
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-3111.rst
Zuletzt geändert: 2025-02-01 08:59:27 GMT