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:
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
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]
execals 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]
printdurch 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] Nonewird zu einem Schlüsselwort [4]; ebensoTrueundFalse[erledigt]...wird zu einem allgemeinen Ausdruckselement [16] [erledigt]aswird 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 vonNonefürA.stringbedeutet, das Top-Level-Modulstringzu 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_whateverwerden 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 wirdtp_boolgenannt [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 Sieraise Exception("message")[12] [erledigt]x: Verwenden Sierepr(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__inoct()undhex(). [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()undbasestring.rfind(); verwenden Siebasestring.index()oderbasestring.[r]partition()oderbasestring.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 denin-Operator [erledigt] - Die Methoden
list.sort()undbuiltin.sorted(): Eliminieren Sie dencmp-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 Sieraw_input()ininput()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 stattdessenf(*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(): insys(oder vielleicht in einem eigenen Modul) unterbringen [2]coerce(): nicht mehr benötigt [2] [erledigt]execfile(),reload(): Verwenden Sieexec()[2] [erledigt]intern(): insys[2], [22] unterbringen [erledigt]reduce(): infunctoolsunterbringen, eine Schleife ist meist lesbarer [2], [9] [erledigt]xrange(): Verwenden Sie stattdessenrange()[1] [Siehe range() oben] [erledigt]StandardError: dies ist ein Überbleibsel der ursprünglichen Ausnahmehierarchie;- subclass
Exceptionstattdessen. [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 Siesys.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 dankoperator.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
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-3100.rst
Zuletzt geändert: 2025-02-01 08:55:40 GMT