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

Python Enhancement Proposals

PEP 3100 – Diverse Pläne für Python 3.0

Autor:
Brett Cannon <brett at python.org>
Status:
Final
Typ:
Prozess
Erstellt:
20. Aug. 2004
Post-History:


Inhaltsverzeichnis

Zusammenfassung

Diese PEP, früher bekannt als PEP 3000, beschreibt Änderungen und neue Funktionen kleineren Umfangs, für die noch keine separate PEP vorliegt, die alle für Python 3000 vorgesehen sind.

Die Liste der in diesem Dokument enthaltenen Funktionen kann sich ändern und bindet die Python-Entwicklergemeinschaft nicht; Funktionen können jederzeit hinzugefügt, entfernt und geändert werden. Der Zweck dieser Liste ist es, unsere Bemühungen zur Sprachentwicklung auf Änderungen zu konzentrieren, die Schritte zu 3.0 sind, und die Leute zu ermutigen, Wege zu finden, den Übergang zu glätten.

Dieses Dokument ist keine Wunschliste, die jeder erweitern kann. Obwohl es zwei Autoren dieser PEP gibt, liefern wir nur den Text; die Entscheidungen, welche Änderungen in diesem Dokument aufgeführt sind, werden von Guido van Rossum getroffen, der sie als Ziele für Python 3.0 ausgewählt hat.

Guido's Verlautbarungen zu Dingen, die sich in Python 3.0 nicht ändern werden, sind in PEP 3099 aufgezeichnet.

Allgemeine Ziele

Ein allgemeines Ziel ist die Reduzierung von Funktionsduplizierung durch Entfernung alter Vorgehensweisen. Ein allgemeines Gestaltungsprinzip wird sein, dass ein offensichtlicher Weg, etwas zu tun, ausreichend ist. [1]

Beeinflussende PEPs

  • PEP 238 (Änderung des Divisionsoperators)
  • PEP 328 (Imports: Mehrzeilig und Absolut/Relativ)
  • PEP 343 (Die „with“-Anweisung)
  • PEP 352 (Erforderliche Oberklasse für Ausnahmen)

Stiländerungen

  • Der C-Styleguide wird aktualisiert, um 4-Leerzeichen-Einrückungen zu verwenden, niemals Tabs. Dieser Stil sollte für alle neuen Dateien verwendet werden; bestehende Dateien können nur dann aktualisiert werden, wenn keine Hoffnung besteht, eine bestimmte Datei aus dem Python 2 HEAD zu mergen. Innerhalb einer Datei sollte der Einrückungsstil konsistent sein. Ansonsten sind derzeit keine weiteren Änderungen am Styleguide geplant.

Kernsprache

  • True-Division wird zum Standardverhalten PEP 238 [erledigt]
  • exec als Anweisung ist nicht lohnenswert – mach es zu einer Funktion [erledigt]
  • Optionale Deklarationen für statische Typisierung hinzufügen PEP 3107 [10] [erledigt]
  • Nur neue Klassen unterstützen; klassische Klassen werden entfernt [1] [erledigt]
  • print durch eine Funktion ersetzen [14] PEP 3105 [erledigt]
  • Das softspace-Attribut von Dateien verschwindet. [erledigt]
  • Verwenden Sie except E1, E2, E3 as err:, wenn Sie die Fehler-Variable wünschen. [3] [erledigt]
  • None wird zu einem Schlüsselwort [4]; ebenso True und False [erledigt]
  • ... wird zu einem allgemeinen Ausdruckselement [16] [erledigt]
  • as wird zu einem Schlüsselwort [5] (bereits ab 2.6) [erledigt]
  • Listen-Komprehensionen werden zu syntaktischem Zucker für die Übergabe eines äquivalenten Generatorausdrucks an list(); als Konsequenz wird die Schleifenvariable nicht mehr exponiert PEP 289 [erledigt]
  • Vergleiche außer == und != zwischen verschiedenen Typen lösen eine Ausnahme aus, es sei denn, sie werden explizit vom Typ unterstützt [6] [erledigt]
  • Floats werden nicht mehr als Argumente anstelle von Integern für Operationen akzeptiert, bei denen Floats unbeabsichtigt akzeptiert wurden (PyArg_ParseTuple() i & l Formate)
  • Entfernen Sie from ... import * im Funktionsbereich. [erledigt] Das bedeutet, dass Funktionen immer optimiert werden können und die Unterstützung für nicht optimierte Funktionen wegfallen kann.
  • Imports PEP 328
    • Imports sind standardmäßig absolut. [erledigt]
    • Relative Imports müssen explizit angegeben werden. [erledigt]
    • Indirektionseinträge in sys.modules (d. h. ein Wert von None für A.string bedeutet, das Top-Level-Modul string zu verwenden) werden nicht unterstützt.
  • __init__.py könnte in Unterpaketen optional werden? __init__.py wird weiterhin für Top-Level-Pakete benötigt.
  • Bereinigen Sie die Py_InitModule() Varianten {,3,4} (auch Import- und Parser-APIs)
  • Bereinigen Sie die in pythonrun usw. exportierten APIs
  • Einige Ausdrücke erfordern Klammern, die in 2.x nicht benötigt wurden
    • Listen-Komprehensionen erfordern Klammern um die Iterables. Dies wird Listen-Komprehensionen Generator-Komprehensionen ähnlicher machen. [x for x in 1, 2] muss sein: [x for x in (1, 2)] [erledigt]
    • Lambdas müssen möglicherweise geklammert werden PEP 308 [NEIN]
  • Um die Verwirrung zwischen __builtin__ und __builtins__ zu beseitigen, wurde beschlossen, __builtin__ (das Modul) in builtins umzubenennen und __builtins__ (den Sandbox-Hook) unangetastet zu lassen. [33] [34] [erledigt]
  • Attribute von Funktionen der Form func_whatever werden in __whatever__ umbenannt [17] [erledigt]
  • Mengen-Literale und -Komprehensionen [19] [20] [erledigt] {x} bedeutet set([x]); {x, y} bedeutet set([x, y]). {F(x) for x in S if P(x)} bedeutet set(F(x) for x in S if P(x)). NB. {range(x)} bedeutet set([range(x)]), NICHT set(range(x)). Es gibt kein Literal für eine leere Menge; verwenden Sie set() (oder {1}&{2} :-). Es gibt kein frozenset-Literal; sie werden zu selten benötigt.
  • Die spezielle Methode __nonzero__ wird in __bool__ umbenannt und muss einen bool zurückgeben. Der Typobjekt-Slot wird tp_bool genannt [23] [erledigt]
  • Dictionary-Komprehensionen, wie erstmals in PEP 274 vorgeschlagen [erledigt] {K(x): V(x) for x in S if P(x)} bedeutet dict((K(x), V(x)) for x in S if P(x)).

Zu entfernen

  • String-Ausnahmen: Verwenden Sie Instanzen einer Exception-Klasse [2] [erledigt]
  • raise Exception, "message": Verwenden Sie raise Exception("message") [12] [erledigt]
  • x: Verwenden Sie repr(x) [2] [erledigt]
  • Der Operator <>: Verwenden Sie stattdessen != [3] [erledigt]
  • Die speziellen Methoden __mod__ und __divmod__ für float. [sie sollten bleiben] [21]
  • Ungebundene Methoden entfernen [7] [26] [erledigt]
  • METH_OLDARGS [erledigt]
  • WITH_CYCLE_GC [erledigt]
  • __getslice__, __setslice__, __delslice__ [32]; Slice-Opcodes entfernen und Slice-Objekte verwenden. [erledigt]
  • __oct__, __hex__: Verwenden Sie stattdessen __index__ in oct() und hex(). [erledigt]
  • __methods__ und __members__ [erledigt]
  • C APIs (siehe Code): PyFloat_AsString, PyFloat_AsReprString, PyFloat_AsStringEx, PySequence_In, PyEval_EvalFrame, PyEval_CallObject, _PyObject_Del, _PyObject_GC_Del, _PyObject_GC_Track, _PyObject_GC_UnTrack PyString_AsEncodedString, PyString_AsDecodedString PyArg_NoArgs, PyArg_GetInt, intargfunc, intintargfunc

    PyImport_ReloadModule ?

Atomare Typen

  • Unterschied zwischen int und long Typen entfernen; eingebaute long-Typen und Literale mit L- oder l-Suffix verschwinden [1] [erledigt]
  • Alle Strings sollen Unicode sein und einen separaten bytes()-Typ haben [1] Der neue String-Typ wird „str“ genannt. Siehe PEP 3137. [erledigt]
  • Geben Sie iterierbare Ansichten anstelle von Listen zurück, wo dies für Methoden atomarer Typen angebracht ist (z. B. dict.keys(), dict.values(), dict.items() usw.); iter*-Methoden werden entfernt. [erledigt]
  • Soll string.join() seine Argumente stringifizieren? [18] [NEIN]
  • open() so korrigieren, dass es einen ValueError zurückgibt, wenn der Modus ungültig ist, anstatt IOError. [erledigt]

Zu entfernen

  • basestring.find() und basestring.rfind(); verwenden Sie basestring.index() oder basestring.[r]partition() oder basestring.rindex() in einem try/except-Block??? [13] [UNWAHRSCHEINLICH]
  • Die Methode file.xreadlines() [31] [erledigt]
  • dict.setdefault()? [15] [UNWAHRSCHEINLICH]
  • Die Methode dict.has_key(); verwenden Sie den in-Operator [erledigt]
  • Die Methoden list.sort() und builtin.sorted(): Eliminieren Sie den cmp-Parameter [27] [erledigt]

Built-in-Namensraum

  • Lassen Sie Built-ins nach Möglichkeit einen Iterator zurückgeben (z. B. range(), zip(), map(), filter() usw.) [erledigt]
  • Entfernen Sie input() und benennen Sie raw_input() in input() um. Wenn Sie das alte input() benötigen, verwenden Sie eval(input()). [erledigt]
  • Führen Sie trunc() ein, das die Methode __trunc__() für sein Argument aufruft; vorgeschlagene Verwendung ist für Objekte wie float, bei denen der Aufruf von __int__() Datenverlust hat, aber eine ganzzahlige Darstellung immer noch gewünscht ist? [8] [erledigt]
  • Änderungen der Ausnahmehierarchie PEP 352 [erledigt]
  • Fügen Sie eine bin()-Funktion für eine Binärdarstellung von ganzen Zahlen hinzu [erledigt]

Zu entfernen

  • apply(): Verwenden Sie stattdessen f(*args, **kw) [2] [erledigt]
  • buffer(): muss sterben (verwenden Sie stattdessen einen bytes()-Typ) (?) [2] [erledigt]
  • callable(): Verwenden Sie einfach isinstance(x, collections.Callable) (?) [2] [erledigt]
  • compile(): in sys (oder vielleicht in einem eigenen Modul) unterbringen [2]
  • coerce(): nicht mehr benötigt [2] [erledigt]
  • execfile(), reload(): Verwenden Sie exec() [2] [erledigt]
  • intern(): in sys [2], [22] unterbringen [erledigt]
  • reduce(): in functools unterbringen, eine Schleife ist meist lesbarer [2], [9] [erledigt]
  • xrange(): Verwenden Sie stattdessen range() [1] [Siehe range() oben] [erledigt]
  • StandardError: dies ist ein Überbleibsel der ursprünglichen Ausnahmehierarchie;
    subclass Exception stattdessen. [erledigt]

Standardbibliothek

  • Die Standardbibliothek neu organisieren, um nicht so flach zu sein?
  • Testcode dorthin verschieben, wo er hingehört, es wird keine weiteren test()-Funktionen mehr in der Standardbibliothek geben
  • Alle Tests konvertieren, um entweder doctest oder unittest zu verwenden.
  • Für die Verfahren zur Verbesserung der Standardbibliothek siehe PEP 3001

Zu entfernen

  • Das sets-Modul. [erledigt]
  • Zu entfernende Stdlib-Module
    • Siehe Docstrings und Kommentare im Quellcode
      • macfs [zu tun]
      • new, reconvert, stringold, xmllib, pcre, pypcre, strop [alle erledigt]
    • Siehe PEP 4
      • buildtools, mimetools, multifile, rfc822, [zu tun]
      • mpz, posixfile, regsub, rgbimage, sha, statcache, sv, TERMIOS, timing [erledigt]
      • cfmfile, gopherlib, md5, MimeWriter, mimify [erledigt]
      • cl, sets, xreadlines, rotor, whrandom [erledigt]
    • Alles in lib-old PEP 4 [erledigt]
      • Para, addpack, cmp, cmpcache, codehack, dircmp, dump, find, fmt, grep, lockfile, newdir, ni, packmail, poly, rand, statcache, tb, tzparse, util, whatsound, whrandom, zmod
  • sys.exitfunc: Verwenden Sie stattdessen das atexit-Modul [28], [35] [erledigt]
  • sys.exc_type, sys.exc_values, sys.exc_traceback: nicht thread-sicher; verwenden Sie sys.exc_info() oder ein Attribut der Ausnahme [2] [11] [28] [erledigt]
  • sys.exc_clear: Python 3's except-Anweisungen bieten dieselbe Funktionalität [24] PEP 3110 [28] [erledigt]
  • array.read, array.write [30]
  • operator.isCallable : callable() built-in wird entfernt [29] [36] [erledigt]
  • operator.sequenceIncludes : überflüssig dank operator.contains [29] [36] [erledigt]
  • Im thread-Modul die Aliase acquire_lock() und release_lock() für die Methoden acquire() und release() auf Lock-Objekten. (Wahrscheinlich auch einfach das thread-Modul als öffentliche API entfernen, zugunsten der immerwährenden Verwendung von threading.py.)
  • UserXyz-Klassen, zugunsten von XyzMixins.
  • Entfernen Sie die unzuverlässigen Methoden empty() und full() aus Queue.py? [25]
  • Entfernen Sie jumpahead() aus der random-API? [25]
  • Das Primitiv für random soll etwas sein, das zufällige Bytes anstelle von zufälligen Floats generiert? [25]
  • Entfernen Sie Cookie.SerialCookie und Cookie.SmartCookie?
  • Ändern Sie die heapq.heapreplace() API, um den neuen Wert mit dem obersten Element des Heaps zu vergleichen?

Offene Probleme

  • C99 erforderlich machen, damit wir // Kommentare, benannte Initialisierer verwenden können, Variablen deklarieren können, ohne einen neuen Scope einzuführen, unter anderem Vorteile. (Auch bessere Unterstützung für IEEE-Gleitkomma-Probleme wie NaN und Infinities?)
  • Unterstützung für alte Systeme entfernen, einschließlich: BeOS, RISCOS, (SGI) Irix, Tru64

Referenzen


Quelle: https://github.com/python/peps/blob/main/peps/pep-3100.rst

Zuletzt geändert: 2025-02-01 08:55:40 GMT