Hinweise
(Redakteure: siehe NEWS.help für Informationen zum Bearbeiten von NEWS mit ReST.)
Was ist neu in Python 2.4 final?
Erscheinungsdatum: 30. NOV. 2004
Core und Builtins
- Bug 875692: Verbessertes Signalhandling, insbesondere bei der Verwendung von Threads, durch erzwungene frühe Wiederholung des PyEval_EvalFrame()-"periodischen" Codes, wenn things_to_do nicht durch Py_MakePendingCalls() gelöscht wird.
Was ist neu in Python 2.4 (Release Candidate 1)
Erscheinungsdatum: 18. NOV. 2004
Core und Builtins
- Bug 1061968: Korrekturen in 2.4a3 zur Behebung des Thread-Bugs 1010677 haben den jahrealten Thread-Shutdown-Race-Bug 225673 wieder eingeführt. Abgesehen von der numerischen Geschichtsstunde sind jetzt alle Fehler in allen drei Berichten behoben.
Bibliothek
- Bug 1052242: Wenn Ausnahmen von einer atexit-Handler-Funktion ausgelöst werden, wird versucht, die restlichen Handler auszuführen. Die zuletzt ausgelöste Ausnahme wird erneut ausgelöst.
- doctestDie neue Unterstützung für das Hinzufügen vonpdb.set_trace()Aufrufe zu Doctests war dramatisch, aber oberflächlich kaputt. Behoben.
- Bug 1065388calendar'sday_name, day_abbr, month_name, undmonth_abbrAttribute emulieren Sequenzen von sprachkorrekten Schreibweisen von Monats- und Tagesnamen. Da sich die Sprache jederzeit ändern kann, wird die korrekte Schreibweise jedes Mal neu berechnet, wenn auf diese zugegriffen wird. Im schlimmsten Fall kann der Index ein Slice-Objekt sein, daher wurden diese bei jeder Indizierung neu berechnet. Dies ist im üblichen Fall, wenn der Index nur eine Ganzzahl ist, viel langsamer als nötig. In diesem Fall wird nur die benötigte einzelne Schreibweise neu berechnet; und wenn der Index ein Slice-Objekt ist, werden nur die vom Slice benötigten Schreibweisen neu berechnet.
- Patch 1061679: __all__ wurde zu pickletools.py hinzugefügt.__all__zu pickletools.py.
Build
- Bug 1034277 / Patch 1035255: Entfernen der Kompilierung des Kerns gegen CoreServices und CoreFoundation unter OS X. Beinhaltete das Entfernen von PyMac_GetAppletScriptFile(), das keine bekannten Benutzer hat. Danke Bob Ippolito.
C API
- Die Funktion PyRange_New() ist veraltet.
Was ist neu in Python 2.4 Beta 2?
Erscheinungsdatum: 03. NOV. 2004
Lizenz
Die Python Software Foundation hat die Lizenz, unter der Python veröffentlicht wird, geändert, um Python-Versionsnummern zu entfernen. Es gab keine weiteren Änderungen an der Lizenz. Zum Beispiel steht dort, wo die Lizenz für Python 2.3 "Python 2.3" sagte, in der neuen Lizenz "Python". Die Absicht ist, die PSF-Lizenz auf beständigere Weise referenzieren zu können. Zum Beispiel sagen einige Leute, dass sie verwirrt sind, dass der Eintrag der Open Source Initiative für die Python Software Foundation License
http://www.opensource.org/licenses/PythonSoftFoundation.php
überall "Python 2.1.1" sagt und sich fragt, ob er nur für Python 2.1.1 gilt.
Der offizielle Name der neuen Lizenz ist die Python Software Foundation License Version 2.
Core und Builtins
- Bug #1055820: Zyklische Garbage Collection schützte nicht davor, dass der Aufruf eines lebenden Weakref zu einem zyklisch verknüpften Müll einen irrsinnigen Mutations des Mülls wiederbeleben könnte, wenn Python-Code während der Garbage Collection lief (durch Ausführen der __del__-Methode eines toten Objekts, Ausführen eines anderen Callbacks bei einem Weakref zu einem toten Objekt oder durch beliebigen Python-Code, der in einem anderen Thread lief und die GIL erlangte, während ein __del__ oder Callback im Garbage-Collection-Thread lief). Das wahrscheinlichste Symptom waren "unmögliche"AttributeErorAusnahmen, die scheinbar zufällig bei schwach referenzierten Objekten auftraten. Die Heilung bestand darin, alle Weakrefs auf unerreichbare Objekte zu löschen, bevor Callbacks ausgeführt werden.
- Bug #1054139: _PyString_Resize() macht nun seinen zwischengespeicherten Hash-Wert ungültig.
Erweiterungsmodule
- Bug #1048870: Der Compiler erzeugt nun eindeutige Codeobjekte für Funktionen mit identischen Körpern. Dies erzeugte verwirrende Traceback-Meldungen, die auf die Funktion verwiesen, in der das Codeobjekt ursprünglich definiert wurde, anstatt auf die gerade ausgeführte Funktion.
Bibliothek
- Patch #1056967 ändert die Semantik von Template.safe_substitute() so, dass kein ValueError bei einem "ungültigen" Treffer ausgelöst wird. Stattdessen wird der Begrenzer zurückgegeben.
- Bug #1052503: pdb.runcall() hat die Schlüsselwortargumente nicht weitergegeben.
- Bug #902037: XML.sax.saxutils.prepare_input_source() kombiniert nun relative Pfade mit einem Basis-Pfad, bevor os.path.isfile() überprüft wird.
- Das Modul whichdb kann nun von der Kommandozeile ausgeführt werden.
- Bug #1045381: time.strptime() kann nun das Datum anhand von %U oder %W (Kalenderwoche) ableiten, wenn der Wochentag und das Jahr ebenfalls angegeben sind.
- Bug #1048816: Bug bei Strg-K am Zeilenanfang in curses.textpad.Textbox behoben
- Bug #1017553: Bug in tarfile.filemode() behoben
- Patch #737473: Bug behoben, bei dem alter Quellcode in Tracebacks angezeigt wurde, auch wenn der Quellcode aktualisiert und neu geladen wurde.
Build
- Patch #1044395: --enable-shared ist nun auch unter FreeBSD erlaubt.
Was ist neu in Python 2.4 Beta 1?
Erscheinungsdatum: 15. OKT. 2004
Core und Builtins
- Patch #975056: Wiederherstellbare Signale wurden auf BSD-Systemen nicht korrekt deaktiviert. PyOS_setsig() wird nun konsistent anstelle von signal() verwendet.
- Die interne portable Implementierung von Thread-lokalem Speicher (TLS), die von derPyGILState_Ensure()/PyGILState_Release()API verwendet wird, war nicht threadkorrekt. Dies konnte zu einer Vielzahl von Problemen führen, bis hin zu Segfaults. Siehe Bug 1041645 für ein Beispiel.
- Eine Kommandozeilenoption wurde hinzugefügt: -m modul, die sys.path nach dem Modul durchsucht und es dann ausführt. (Beigetragen von Nick Coghlan.)
- Der Bytecode-Optimierer faltet nun Tupel von Konstanten zu einer einzelnen Konstante.
- SF Bug #513866: Anomalie beim Vergleich von Float/Long. Vor 2.4b1 wurde beim Vergleich einer Ganzzahl mit einer Gleitkommazahl die Ganzzahl in eine Gleitkommazahl umgewandelt. Dies konnte zu fehlerhaften Überlauffehlern führen (wenn die Ganzzahl sehr groß war) und zu Anomalien wielong(1e200)+1 == 1e200 == long(1e200)-1. Eine Umwandlung in Gleitkommazahlen wird nicht mehr durchgeführt, und Fälle wielong(1e200)-1 < 1e200, long(1e200)+1 > 1e200und(1 << 20000) > 1e200werden nun korrekt berechnet.
Erweiterungsmodule
- collections.dequeObjekte kamen mit der Garbage Collection nicht ganz zurecht, was in einer Release-Build zu einem Segfault oder in einer Debug-Build zu einem Assert-Fehler führen konnte. Außerdem wurden Überlaufprüfungen, eine bessere Erkennung von Mutationen während der Iteration hinzugefügt und Vergleiche von Deques von ungewöhnlichen Subklassen-Überschreibungen der __iter__()-Methode abgeschirmt.
Bibliothek
- Patch 1046644: distutils build_ext erhielt zwei neue Optionen - --swig zum Angeben der zu verwendenden SWIG-Ausführungsdatei und --swig-opts zum Angeben von Optionen, die an SWIG übergeben werden sollen. --swig-opts="-c++" ist die neue Schreibweise für --swig-cpp.
- Patch 983206: distutils beachtet nun die Umgebungsvariable LDSHARED, wenn sie gesetzt ist.
- Das Modul subprocess.py von Peter Astrand wurde hinzugefügt. Weitere Einzelheiten finden Sie in PEP 324.
- time.strptime() maskiert nun Zeitzonen und alle anderen lokalspezifischen Zeichenketten für regex-spezifische Symbole korrekt. Unter japanischem Windows brach dies zusammen, wenn die Zeitzone als "Tokyo (standard time)" angegeben wurde. Schließt Bug #1039270.
- Updates für das E-Mail-Paket
- email.Utils.formatdate() erhielt ein Argument 'usegmt' für die HTTP-Unterstützung.
- Alle veralteten APIs, die in E-Mail 2.x Warnungen ausgaben, wurden entfernt: _encoder-Argument für den MIMEText-Konstruktor, Message.add_payload(), Utils.dump_address_pair(), Utils.decode(), Utils.encode()
- Neue Veralterungen: Generator.__call__(), Message.get_type(), Message.get_main_type(), Message.get_subtype(), das 'strict'-Argument für den Parser-Konstruktor. Diese werden in E-Mail 3.1 entfernt.
- Die Unterstützung für Python-Versionen vor 2.3 wurde entfernt (siehe PEP 291).
- Alle Fehlerklassen wurden in Defect umbenannt.
- Einige FeedParser-Korrekturen; außerdem wird MultipartInvariantViolationDefect zu Meldungen hinzugefügt, die sich als Multipart bezeichnen, aber eigentlich nicht sind.
- Aktualisierungen der Dokumentation.
- Die Funktionen findall() und finditer() von re akzeptieren nun ein optionales flags-Argument, genau wie die Funktionen compile(), search() und match(). Außerdem wurden die zuvor bestehenden Start- und Stopp-Parameter für die Methoden findall() und finditer() von regulären Ausdrucksobjekten dokumentiert.
- rfc822-Nachrichten unterstützen nun die Iteration über die Header.
- Das (undokumentierte) tarfile.Tarfile.membernames wurde entfernt; Anwendungen sollten die getmember-Funktion verwenden.
- httplib bietet nun symbolische Konstanten für die HTTP-Statuscodes.
- SF Bug #1028306: Der Versuch, eindatetime.datemit einemdatetime.datetimezu vergleichen, verglich fälschlicherweise nur Jahr, Monat und Tag. Jetzt verhält es sich wie ein gemischter TypvergleichFalsefür==, Truefür!=und löstTypeErrorfür andere Vergleichsoperatoren aus. Da datetime eine Unterklasse von date ist, kann der Vergleich nur der Basisklassen-Mitglieder (date) immer noch durchgeführt werden, wenn dies gewünscht ist, indem die entsprechende Datumsfunktion erzwungen wird; z. B.a_date.__eq__(a_datetime)ist wahr, wenn und nur wenn die Mitglieder Jahr, Monat und Tag vona_dateunda_datetimegleich sind.
- bdist_rpm unterstützt nun Kommandozeilenoptionen --force-arch, {pre,post}-install, {pre,post}-uninstall und {prep,build,install,clean,verify}-script.
- SF Patch #998993: Die zustandsbehafteten UTF-8- und UTF-16-Decoder unterstützen nun die Dekodierung unvollständiger Eingaben (wenn der Eingabestrom vorübergehend erschöpft ist).codecs.StreamReaderimplementiert nun Pufferung, die eine ordnungsgemäße readline-Unterstützung für die UTF-16-Decoder ermöglicht.codecs.StreamReader.read()hat ein neues Argumentchars, das die zurückzugebende Anzahl von Zeichen angibt.codecs.StreamReader.readline()undcodecs.StreamReader.readlines()haben ein neues Argumentkeepends. Abschließende "n"s werden von den Zeilen gestrippt, wennkeependsfalsch ist.
- Die Dokumentation für doctest ist stark erweitert und behandelt nun alle neuen öffentlichen Funktionen (von denen es viele gibt).
- doctest.masterwurde wieder aufgenommen, unddoctest.testmod()aktualisiert ihn wieder. Das ist nicht gut, da jedertestmod()Aufruf zum Aufblähen des "versteckten" Zustands vondoctest.masterbeiträgt, aber alter Code anscheinend davon abhängt. Vorerst können wir nur empfehlen, Doctests über die Integrationsfunktionen von Doctest für Unittests zusammenzufügen.
- httplib behandelt nun IPv6-Adress-/Port-Paare.
- SF Bug #1017864: ConfigParser behandelt Standardschlüssel nun korrekt und verarbeitet sie mitConfigParser.optionxformbei Angabe, konsistent mit der Behandlung von Konfigurationsdateieinträgen und zur Laufzeit gesetzten Optionen.
- SF Bug #997050: Dokumentieren, testen und prüfen Sie auf Nicht-Zeichenkettenwerte in ConfigParser. Die neue Beschränkung auf Zeichenketten, die in Revision 1.65 hinzugefügt wurde, wurde in die Klasse SafeConfigParser verschoben, wobei das bestehende Verhalten von ConfigParser & RawConfigParser unverändert blieb, und die Bedingungen dokumentiert wurden, unter denen Nicht-Zeichenkettenwerte funktionieren.
Build
- Der Build unter Darwin enthält nun /opt/local/include und /opt/local/lib zum Erstellen von Erweiterungsmodulen. Dies dient der Einbeziehung von Software, die als DarwinPorts-Port installiert ist <http://darwinports.opendarwin.org/>
- pyport.h definiert nun ein Py_IS_NAN-Makro. Es funktioniert wie vorgesehen, wenn die Plattform-C die Wahrheit fürx != xergibt, wenn und nur wenn X ein NaN ist. Andere Plattformen können die Standarddefinition mit einer plattformspezifischen Schreibweise in der pyconfig.h dieser Plattform überschreiben. Sie können nun auch die Standarddefinition von Py_IS_INFINITY in pyport.h überschreiben.
C API
- SF Patch 1044089: Neue FunktionPyEval_ThreadsInitialized()gibt ungleich Null zurück, wenn PyEval_InitThreads() aufgerufen wurde.
- Die undokumentierte und ungenutzte externe Ganzzahl_PyThread_Startedwurde entfernt.
- Die C-API-AufrufePyInterpreterState_New()undPyThreadState_New()gehören zu den wenigen, die als sicher zum Aufruf ohne Halten der GIL beworben werden. Dies galt jedoch nicht für eine Debug-Build, wie Bug 1041645 zeigte. In einer Debug-Build leitet Python diePyMemFamilie von Aufrufen an Pythons Small-Object-Allocator weiter, um von dessen zusätzlichen Debugging-Funktionen zu profitieren. Pythons Small-Object-Allocator ist jedoch nicht threadsicher und verlässt sich auf die GIL, um die Kosten für die eigene Sperrung zu vermeiden.PyInterpreterState_New()undPyThreadState_New()rufen nun direkt die Plattformmalloc()auf, unabhängig vom Build-Typ.
- PyLong_AsUnsignedLong[Mask] unterstützt nun auch Integer-Objekte.
- SF Patch #998993PyUnicode_DecodeUTF8StatefulundPyUnicode_DecodeUTF16Statefulwurden hinzugefügt, die zustandsbehaftetes Dekodieren implementieren.
Tests
- test__locale zu unittest portiert
Mac
- plistlibunterstützt nun Nicht-Dict-Wurzelobjekte. Es gibt auch eine neue Schnittstelle zum Lesen und Schreiben von Plist-DateienreadPlist(pathOrFile)undwritePlist(rootObject, pathOrFile)
Tools/Demos
- Die Skripte zum Vergleich von Textdateienndiff.pyunddiff.pylesen nun die Eingabedateien im Universal-Newline-Modus. Dies erspart ihnen, viel Zeit aufzuwenden, um das nutzlose Ergebnis zu ermitteln, dass z. B. eine Datei mit Windows-Zeilenenden und eine Datei mit Linux-Zeilenenden keine Zeilen gemeinsam haben.
Was ist neu in Python 2.4 Alpha 3?
Erscheinungsdatum: 02. SEP. 2004
Core und Builtins
- SF Patch #1007189from ... import ...Anweisungen erlauben nun, dass die Namensliste von Klammern umschlossen wird.
- Einige Beschleunigungen für lange Arithmetik, dank Trevor Perrin. Die Grundschulmultiplikation wurde durch Optimierung des C-Codes etwas beschleunigt. Die Grundschulquadrierung wurde um etwa den Faktor 2 beschleunigt, indem ausgenutzt wurde, dass etwa die Hälfte der Ziffernprodukte bei einer Quadrierung Duplikate sind. Da die Potenzierung oft die Quadrierung verwendet, beschleunigt dies auch die lange Potenz. Zum Beispiel sank die Zeit zur Berechnung von 17**1000000 von etwa 14 Sekunden auf 9 auf meiner Maschine aufgrund dieser viel. Die Grenze für die Karatsuba-Multiplikation wurde angehoben, da die Grundschulmultiplikation schneller wurde und die Grenze ohnehin aggressiv klein war. Der Potenzierungsalgorithmus wurde von links nach rechts auf links nach rechts umgestellt, was für kleine Basen effizienter ist. Darüber hinaus, wenn der Exponent groß ist, führt der Algorithmus nun 5 Bits (statt 1 Bit) gleichzeitig aus. Das halbierte die Zeit zur Berechnung von 17**1000000 auf meiner Maschine erneut, auf etwa 4,5 Sekunden.
- OverflowWarning wird nicht mehr generiert. PEP 237 sah dies für Python 2.3 vor, aber da OverflowWarning standardmäßig deaktiviert war, bemerkte niemand, dass es immer noch generiert wurde. Für den Fall, dass Benutzercode sie immer noch verwendet, werden die Python-Builtin OverflowWarning und die entsprechende C-API PyExc_OverflowWarning bis Python 2.5 existieren.
- Py_InitializeEx wurde hinzugefügt.
- Reihenfolge der Anwendung von Dekoratoren korrigiert. Die richtige Reihenfolge ist von unten nach oben; der erste angegebene Dekorator ist der letzte, der aufgerufen wird.
- SF Patch #1005778. Behebt einen Segfault, wenn sich die Listengröße während des Aufrufs von list.index() geändert hat. Dies konnte passieren, wenn eine Rich-Comparison-Funktion die Liste modifizierte.
- Diefunc_name(auch bekannt als__name__) Attribut von benutzerdefinierten Funktionen ist nun schreibbar.
- code_new (auch bekannt als new.code()) prüft nun seine Argumente sorgfältig genug, dass die Übergabe an PyCode_New() keine Aufrufe an Py_FatalError() oder PyErr_BadInternalCall() auslöst. Es ist immer noch der Fall, dass das zurückgegebene Codeobjekt völlig unsinnig sein kann.
- Unterklassen von String können nicht mehr intern gespeichert werden. Die Semantik des Internings war hier unklar - eine Unterklasse konnte zum Beispiel veränderlich sein - und wies Fehler auf. Explizites Internieren einer String-Unterklasse über intern() löst einen TypeError aus. Interne Operationen, die versuchen, eine String-Unterklasse zu internieren, haben keine Wirkung.
- Bug 1003935: xrange() konnte fehlerhafte OverflowErrors melden. Es wurde dokumentiert, was xrange() beabsichtigt, und die Tests entsprechend repariert.
Erweiterungsmodule
- difflib unterstützt nun HTML Side-by-Side-Diff.
- os.urandom wurde für Systeme hinzugefügt, die Quellen für Zufallsdaten unterstützen.
- Patch 1012740: truncate() auf einem beschreibbaren cStringIO setzt die Position auf das Ende des Streams zurück. Dies entspricht dem ursprünglichen StringIO-Modul und vermeidet die versehentliche Wiederbelebung von Daten, die eigentlich abgeschnitten werden sollten.
- socket.socketpair() wurde hinzugefügt.
- CurrentByteIndex, CurrentColumnNumber, CurrentLineNumber Mitglieder wurden zum xml.parsers.expat.XMLParser-Objekt hinzugefügt.
- Die Module mpz, rotor und xreadlines, die in früheren Python-Versionen als veraltet galten, wurden nun entfernt.
Bibliothek
- Patch #934356: Wenn ein Modul __all__ definiert, wird dies anstelle von Heuristiken zur Filterung importierter Namen geglaubt.
- Patch #941486: os.path.lexists() wurde hinzugefügt, das für defekte Symlinks True zurückgibt, im Gegensatz zu os.path.exists().
- Das Random-Modul verwendet nun os.urandom() zum Seed, falls verfügbar. Ein neuer Generator basierend auf os.urandom() wurde hinzugefügt.
- difflib und diff.py können nun HTML generieren.
- bdist_rpm enthält nun Version und Release im BuildRoot und ersetzt "-" durch_in Version und Release.
- distutils build/build_scripts hat nun eine -e Option, um den Pfad zum Python-Interpreter für installierte Skripte anzugeben.
- Die PEP 292 Klassen Template und SafeTemplate werden zum string-Modul hinzugefügt.
- tarfile generiert nun standardmäßig GNU tar-Dateien.
- HTTPResponse hat nun eine getheaders-Methode.
- Patch #1006219: inspect.getsource behandelt nun '@'-Dekoratoren. Danke Simon Percivall.
- logging.handlers.SMTPHandler.date_time wurde entfernt; die Klasse verwendet nun email.Utils.formatdate, um den Zeitstempel zu generieren.
- Eine neue Funktion tkFont.nametofont wurde hinzugefügt, um eine vorhandene Schriftart zurückzugeben. Der Konstruktor der Font-Klasse hat nun ein zusätzliches Argument 'exists', das, wenn True, anfordert, eine vorhandene Schriftart zurückzugeben/zu konfigurieren, anstatt eine neue zu erstellen.
- Die Methoden min() und max() des decimal-Pakets wurden aktualisiert, um der neuesten Revision der General Decimal Arithmetic Specification zu entsprechen. Stille NaNs werden ignoriert und gleiche Werte werden basierend auf Vorzeichen und Exponent sortiert.
- Die Methode Context.copy() des decimal-Pakets gibt nun Deep Copies zurück.
- sys.exitfunc wurde zugunsten des atexit-Moduls veraltet. Das sys.exitfunc-Attribut wird aus Gründen der Abwärtskompatibilität beibehalten, und atexit wird einfach die bevorzugte Methode sein.
- Patch #675551: Die Funktionen get_history_item und replace_history_item wurden zum readline-Modul hinzugefügt.
- Bug #989672: pdb.doc und die Hilfemeldungen für die Methoden help_d und help_u der Klasse pdb.Pdb wurden korrigiert. d(own) geht zu einem neueren Frame, u(p) zu einem älteren Frame, nicht umgekehrt.
- Bug #990669: os.path.realpath() löst Symlinks auf, bevor der Pfad normalisiert wird, da die Normalisierung des Pfads die Bedeutung des Pfads ändern kann, wenn er Symlinks enthält.
- Bug #851123: shutil.copyfile löst eine Ausnahme aus, wenn versucht wird, eine Datei auf einen Link zu sich selbst zu kopieren. Danke Gregory Ball.
- Bug #570300: Fixiert inspect, um Dateipfade über os.path.realpath() aufzulösen, um alle Funktionen in einem Modul korrekt aufzulisten, wenn das Modul selbst über einen Symlink erreicht wird. Danke Johannes Gijsbers.
- Die Refaktorierung von doctest wurde fortgesetzt. Einzelheiten finden Sie in der Dokumentation. Im Rahmen dieser Anstrengung sind einige alte und wenig (nie?) genutzte Funktionen nun veraltet: die Tester-Klasse, die Funktion is_private() im Modul und das Argument isprivate zu testmod(). Die Tester-Klasse bot eine schwache "manuelle" Möglichkeit, mehrere Doctests zu kombinieren, wenn man genau wusste, was man tat. Die neueren Doctest-Funktionen für die Unitest-Integration erledigten dies bereits besser, sind jetzt stärker denn je, und die neue Klasse DocTestRunner ist eine sinnvollere Grundlage, wenn man es manuell machen möchte. Der "Private Name"-Filter-Gimmick war von Anfang an ein Fehler, und testmod() wurde vor langer Zeit geändert, ihn standardmäßig zu ignorieren. Wenn Sie Tests filtern möchten, kann die neue Klasse DocTestFinder verwendet werden, um eine Liste aller Doctests zurückzugeben, und Sie können diese Liste nach beliebigen berechenbaren Kriterien filtern, bevor Sie sie an eine DocTestRunner-Instanz übergeben.
- Bug #891637, Patch #1005466: Absturz von inspect.getargs() bei def foo((bar)) behoben.
Tools/Demos
- IDLEs Tastenkombinationen für Fenster sind nun nicht mehr Groß-/Kleinschreibung-sensitiv, sodass Strg-V genauso funktioniert wie Strg-v.
- pygettext.py: Generiert den POT-Creation-Date-Header im ISO-Format.
Build
- Abwärtskompatibilität: longintrepr.h löst nun einen Kompilierungsfehler aus, wenn SHIFT (die Anzahl der Bits in einem Python-Long- "Digit") nicht durch 5 teilbar ist. Diese neue Anforderung ermöglicht einfachen Code für die neue 5-Bit-pro-Zeit-long_pow()-Implementierung. Bei Bedarf könnte die Einschränkung aufgehoben werden (durch Komplizierung von long_pow() oder durch Rückgriff auf den 1-Bit-pro-Zeit-Algorithmus), aber es gibt keine Pläne dazu.
- Bug #991962: Beim Erstellen mit --disable-toolbox-glue unter Darwin wird kein Versuch unternommen, Mac-spezifische Module zu erstellen.
- Die --with-tsc-Flagge für configure zur Aktivierung der VM-Profilierung mit dem Zeitstempelzähler des Prozessors funktioniert nun auf PPC-Plattformen.
- Patch #1006629: _XOPEN_SOURCE auf 500 unter Solaris 8/9 definieren, um mit der GCC-Definition übereinzustimmen und Neubedeutungswarnungen zu vermeiden.
- Erkennung der pthreads-Unterstützung (bereitgestellt durch die GNU pth Pthread-Emulation) auf GNU/k*BSD-Systemen.
- Bug #1005737, #1007249: Mehrere Build-Probleme und Warnungen behoben, die auf alten/Legacy-C-Compilern von HP-UX, IRIX und Tru64 gefunden wurden.
C API
Dokumentation
- Patch #1005936, Bug #1009373: Indexeinträge mit einem Unterstrich wurden behoben, wenn sie mit Acrobat angezeigt wurden.
- Bug #990669: os.path.normpath kann die Bedeutung eines Pfades ändern, wenn er symbolische Links enthält. Dies wurde seit 1992 in einem Kommentar dokumentiert, ist aber nun auch in der Bibliotheksreferenz enthalten.
Neue Plattformen
- FreeBSD 6 wird nun unterstützt.
Tests
Windows
- Die Stapelreservierung für python.exe und pythonw.exe wurde von den standardmäßigen 1 MB auf 2 MB erhöht. Die Stapelrahmen unter VC 7.1 für 2.4 sind groß genug im Vergleich zu VC 6.0 für 2.3.4, dass tief rekursive Programme innerhalb des Standardwerts von sys.getrecursionlimit() von 1000 unerkannte C-Stapelüberläufe erleiden konnten. Das Standardtestprogramm test_compiler war ein solches Programm. Wenn ein Python-Prozess unter Windows "einfach verschwindet" ohne Spur und ohne Fehlermeldung, aber mit dem Exit-Code 128, kann ein unerkannter Stapelüberlauf das Problem sein.
Mac
Was ist neu in Python 2.4 Alpha 2?
Erscheinungsdatum: 05. AUG. 2004
Core und Builtins
Patch #980695: Implementiert effiziente String-Verkettung für Anweisungen der Form s=s+t und s+=t. Dies variiert je nach Implementierung. Entsprechend wird die Methode str.join() für leistungskritischen Code dringend empfohlen.
PEP-0318, Function Decorators wurden der Sprache hinzugefügt. Diese werden mit der Java-ähnlichen @decorator-Syntax implementiert, wie folgt
@staticmethod def foo(bar):
(Die PEP muss aktualisiert werden, um den aktuellen Stand widerzuspiegeln)
Wenn der Import eines Moduls M eine Ausnahme auslöst, hinterlässt Python M nicht mehr in sys.modules. Vor 2.4a2 tat es dies, und ein anschließender Import von M würde erfolgreich sein und ein Modulobjekt aus sys.modules abrufen, das so viel wie möglich von der Initialisierung von M widerspiegelt, bevor die Ausnahme ausgelöst wurde. Nachfolgende Importe erhielten keine Anzeige, dass M sich in einem teilweise initialisierten Zustand befand, und die Importeure konnten infolgedessen in willkürlich schlechte Schwierigkeiten geraten (das erhaltene M war in einem unbeabsichtigten Zustand, der beliebig weit vom Autor von M entfernt war). Nun werden nachfolgende Importe von M weiterhin Ausnahmen auslösen (aber wenn zum Beispiel der Quellcode von M zwischen den Importversuchen bearbeitet wird, dann werden spätere Versuche möglicherweise erfolgreich sein oder eine andere Ausnahme auslösen).
Dies kann bestehenden Code brechen, aber in solchen Fällen funktionierte der Code wahrscheinlich versehentlich vorher. Im Python-Quellcode war der einzige entdeckte Bruchfall in einem Test, der versehentlich darauf angewiesen war, dass ein beschädigtes Modul in sys.modules verblieb. Es sind auch Fälle bekannt, in denen Tests, die absichtlich Importfehler provozieren, beschädigte Module selbst aus sys.modules entfernen, und solche Tests werden nun fehlschlagen, wenn sie ein bedingungsloses del sys.modules[M] durchführen.
u'%s' % obj versucht nun zuerst obj.__unicode__() und greift dann auf obj.__str__() zurück, wenn keine __unicode__-Methode gefunden werden kann.
Patch #550732: PyArg_VaParseTupleAndKeywords() hinzugefügt. Analog zu PyArg_VaParse(). Beide sind nun dokumentiert. Danke Greg Chapman.
Erlaube String- und Unicode-Rückgabetypen von .encode()/.decode()-Methoden für String- und Unicode-Objekte. unicode.decode() wurde hinzugefügt, das aus unerfindlichen Gründen fehlte.
Ein Versuch, das Durcheinander zu beheben, das Pythons Verhalten mit Signalhandlern und Threads ist, kompliziert durch das Verhalten von readline. Es ist durchaus möglich, dass hier noch Fehler vorhanden sind.
Die C-Makros Py_CLEAR und Py_VISIT wurden hinzugefügt, um die Implementierung von Typen zu erleichtern, die Garbage Collection unterstützen.
Der Compiler behandelt None nun als Konstante.
Der Typ der von __int__, __float__, __long__, __oct__ und __hex__ zurückgegebenen Werte wird nun überprüft. Die Rückgabe eines ungültigen Typs löst einen TypeError aus. Dies entspricht dem Verhalten von Jython.
bind_textdomain_codeset() im locale-Modul implementiert.
Eine Problemumgehung für ordnungsgemäße String-Operationen unter BSDs wurde hinzugefügt. str.split und str.is*-Methoden können nun korrekt mit UTF-8-Locales funktionieren.
Bug #989185: unicode.iswide() und unicode.width() wurden entfernt und die Unterstützung für ostasiatische Breiten wurde in das unicodedata-Erweiterungsmodul verschoben.
Patch #941229: Die Quellcode-Codierung im interaktiven Modus bezieht sich nun auf sys.stdin.encoding und nicht nur auf ISO-8859-1. Dies ermöglicht es Nicht-Latin-1-Benutzern, Unicode-Strings direkt zu schreiben.
Erweiterungsmodule
- cpickle unterstützt nun die gleichen Schlüsselwortargumente wie pickle.
Bibliothek
Neue Codecs und Aliase für ISO_8859-11, ISO_8859-16 und TIS-620 hinzugefügt.
Dank Edward Loper wurde doctest massiv refaktoriert und viele neue Funktionen hinzugefügt. Vollständige Dokumentationen werden später erscheinen. Vorerst geben die Kommentare des doctest-Moduls und neue Testfälle eine gute Abdeckung. Die Refaktorierung bietet viele Hook-Punkte zur Anpassung des Verhaltens (z. B. wie Fehler gemeldet und erwartete von tatsächlicher Ausgabe verglichen werden). Neue Funktionen umfassen einen <BLANKLINE>-Marker für erwartete Ausgaben mit Leerzeilen, Optionen zur Erzeugung von einheitlichen oder kontextuellen Diff's, wenn die tatsächliche Ausgabe nicht mit den Erwartungen übereinstimmt, eine Option zur Normalisierung von Leerzeichen vor dem Vergleich und eine Option zur Verwendung von Ellipsen zur Angabe von "egal" Regionen der Ausgabe.
Tkinter unterstützt nun die Optionen wish -sync und -use.
Die folgenden Methoden in time unterstützen die Übergabe von None: ctime(), gmtime() und localtime(). Wenn None übergeben wird, wird die aktuelle Zeit verwendet (wie auch beim Weglassen des Arguments). [SF Bug 658254, Patch 663482]
nntplib ignoriert nun eine .netrc-Datei.
urllib2 erkennt nun die Basisauthentifizierung, auch wenn andere Authentifizierungsschemata angeboten werden.
Bug #1001053. wave.open() akzeptiert nun Unicode-Dateinamen.
gzip.GzipFile hat eine neue fileno()-Methode, um den Handle des zugrunde liegenden Dateiobjekts abzurufen (vorausgesetzt, es hat eine fileno()-Methode). Dies ist erforderlich, wenn Sie os.fsync() auf einer GzipFile verwenden möchten.
imaplib hat zwei neue Methoden: deleteacl und myrights.
nntplib hat zwei neue Methoden: description und descriptions. Sie verwenden eine RFC-konformere Methode, um eine Newsgrouppeschreibung zu erhalten.
Bug #993394. Behebt eine mögliche falsche Fährte einer KeyError im 'threading'-Modul, die während der Interpreterabschaltung von einer registrierten Funktion mit atexit ausgelöst wird, wenn dummy_threading verwendet wird.
Bug #857297/Patch #916874. Behebt einen Fehler beim Extrahieren eines Hardlinks aus einem Tarfile.
Patch #846659. Behebt einen Fehler in tarfile.py bei der Erstellung von GNU-Langnamen/Langlinks.
Das veraltete FCNTL.py wurde gelöscht. Das eingebaute fcntl-Modul ist seit Python 1.5a3 verfügbar (auf Plattformen, die fcntl unterstützen), und FCNTL.py exportierte nur die Namen von fcntl, nachdem eine Veraltungswarnung ausgegeben wurde, die Sie aufforderte, fcntl direkt zu verwenden.
Mehrere neue Unicode-Codecs werden hinzugefügt: big5hkscs, euc_jis_2004, iso2022_jp_2004, shift_jis_2004.
Bugs #788520. Queue.{get, get_nowait, put, put_nowait} haben neue Implementierungen, die Bedingungen nutzen (die es zur Einführung von Queue noch nicht gab). Eine geringfügige semantische Änderung besteht darin, dass die von nicht-blockierenden Aufrufen ausgelösten Full- und Empty-Ausnahmen nun nur noch auftreten, wenn die Warteschlange zum Zeitpunkt der Überprüfung tatsächlich voll oder leer war (natürlich kann die Warteschlange zu dem Zeitpunkt, an dem ein aufrufender Thread diese Ausnahmen sieht, nicht mehr voll oder leer sein, obwohl). Zuvor konnten die Ausnahmen auch ausgelöst werden, wenn es für die Implementierung "nur ungünstig" war, den wahren Zustand der Warteschlange zu ermitteln (da die Warteschlange von einer anderen laufenden Methode gesperrt war).
Bugs #979794 und #980117: difflib.get_grouped_opcodes() behandelt nun den Fall des Vergleichs zweier leerer Listen. Dies betraf sowohl context_diff() als auch unified_diff(),
Bug #980938: smtplib gibt nun Debug-Ausgaben an sys.stderr aus.
Bug #930024: posixpath.realpath() behandelt nun Endlosschleifen in Symlinks, indem es den letzten Punkt im Pfad zurückgibt, der nicht Teil einer Schleife war. Danke AM Kuchling.
Bug #980327: ntpath behandelt nun komprimierende fehlerhafte Schrägstriche zwischen dem Laufwerksbuchstaben und dem Rest des Pfades. Behandelt auch UNC-Adressen jetzt eindeutig. Danke Paul Moore.
Bug #679953: zipfile.py sollte nun für Dateien über 2 GB funktionieren. Die gepackten Daten für Dateigrößen (komprimiert und unkomprimiert) wurden als signed anstatt unsigned gespeichert.
decimal.py verwendet nun nur noch Signale in der IBM-Spezifikation. Die anderen Bedingungen sind nicht mehr Teil der öffentlichen API.
Das Modul codecs verfügt nun über zwei neue generische APIs: encode() und decode(), die die Rückgabetypen nicht einschränken (im Gegensatz zu den gleichnamigen Methoden von Unicode und String).
Nicht-blockierende SSL-Sockets funktionieren wieder; sie waren in Python 2.3 fehlerhaft. SF Patch 945642.
Verbesserungen bei der Integration von Doctest mit Unittest
o Verbesserte Unitest-Ausgabe für Doctest-basierte Unitests
- o Kann nun setUp- und tearDown-Funktionen übergeben, wenn
DocTestSuites erstellt werden.
Das Modul threading hat eine neue Klasse, local, zur Erstellung von Objekten, die thread-lokale Daten bereitstellen.
Bug #990307: Wenn keep_empty_values True ist, gibt cgi.parse_qsl() keine irreführenden leeren Felder mehr zurück.
bind_textdomain_codeset() im gettext-Modul implementiert.
Die Funktionenfamilie l*gettext() wurde im gettext-Modul eingeführt, die Übersetzungszeichenketten zurückgibt, die in der bevorzugten Kodierung kodiert sind, wie von getpreferredencoding() im locale-Modul angegeben.
Das Modul optparse (und Tests) wurde auf Optik 1.5a1 aktualisiert. Änderungen
- Erweiterung der Standardwerte in Hilfetexten: Der String "%default" im Hilfetext einer Option wird durch str() des Standardwerts dieser Option oder "none" ersetzt, wenn kein Standardwert vorhanden ist.
- Bug #955889: Option-Standardwerte, die zufällig Zeichenketten sind, werden nun auf die gleiche Weise wie Werte von der Kommandozeile verarbeitet. Dies ermöglicht die Generierung schönerer Hilfe bei der Verwendung benutzerdefinierter Typen. Kann mit parser.set_process_default_values(False) deaktiviert werden.
- Bug #960515: Kein Absturz beim Generieren von Hilfe für Callback-Optionen, die 'type' angeben, aber nicht 'dest' oder 'metavar'.
- Feature #815264: Ändern des Standard-Hilfeformats für kurze Optionen, die ein Argument annehmen, von z. B. "-oARG" zu "-o ARG"; Hinzufügen von set_short_opt_delimiter() und set_long_opt_delimiter() Methoden zu HelpFormatter, um eine (leichte) Anpassung der Formatierung zu ermöglichen.
- Patch #736940: Internationalisierung von Optik: Alle integrierten, benutzerorientierten Literalzeichenketten werden durch gettext.gettext() geleitet. (Wenn Sie Übersetzungen (.po-Dateien) wünschen, sind diese nicht in Python enthalten – Sie finden sie in der Optik-Quellcodeverteilung von http://optik.sourceforge.net/ .)
- Bug #878453: Berücksichtigung der Umgebungsvariable $COLUMNS zum Umbrechen der Hilfeausgabe.
- Feature #988122: "%prog" in der 'description', die an OptionParser übergeben wird, wird nun erweitert, genau wie in den Strings 'usage' und 'version'. (Dies geschieht *nicht* in der 'description', die an OptionGroup übergeben wird.)
C API
- PyImport_ExecCodeModule() und PyImport_ExecCodeModuleEx(): Wenn beim Laden des Moduls ein Fehler auftritt, löschen diese nun den Eintrag des Moduls aus sys.modules. Alle Wege des Ladens von Modulen rufen letztendlich eine dieser Funktionen auf, daher ist dies eine Änderung im Semantik im Fehlerfall für alle Wege des Ladens von Modulen. In seltenen Fällen kann ein Modul-Loader wünschen, ein Modulobjekt in sys.modules zu behalten, obwohl der Code des Moduls nicht ausgeführt werden kann. In solchen Fällen muss der Modul-Loader die Neuanordnung des Namens und des Modulobjekts in sys.modules veranlassen. PyImport_ReloadModule() wurde geändert, um das ursprüngliche Modulobjekt wieder in sys.modules einzufügen, wenn das Modul-Reload fehlschlägt, sodass seine sichtbare Semantik unverändert bleibt.
- Ein großer Stapel von Makros zur Extraktion von Datums- und Zeitfeldern wird nun dokumentiert, dank Anthony Tuininga (Patch #986010).
Dokumentation
- Verbesserung des Tutorials zur Erstellung von Typen in C.
- Hinweis auf die Bedeutung der Neuzuweisung von Datenmitgliedern, bevor ihre Werte zugewiesen werden.
- Korrektur meines Missverständnisses über Rückgabewerte von visitprocs. Seufz.
- Erwähnung der arbeitssparenden Makros Py_VISIT und Py_CLEAR.
- Umfassende Überarbeitung der Dokumentation des math-Moduls, um allgemeine Verwirrungen zu beseitigen.
Tests
- Die Testdatendateien für die Decimal-Testsuite werden nun auf Plattformen installiert, die das Makefile verwenden.
- SF Patch 995225: Die Testdatei testtar.tar enthielt versehentlich CVS-Schlüsselwörter (wie $Id: NEWS.txt 7812 2004-11-30 11:53:58Z anthony $), die je nach Checkout der Testdatei zu fehlerhaften Ausfällen in test_tarfile.py führen konnten.
Was ist neu in Python 2.4 alpha 1?
Veröffentlichungsdatum: 08. JULI 2004
Core und Builtins
- weakref.ref ist nun auch das Typobjekt, das als weakref.ReferenceType bekannt ist; es kann wie jede andere New-Style-Klasse unterklassen werden. Es gibt nun weniger Overhead pro Eintrag in WeakValueDictionary-Objekten (ein Objekt anstelle von drei).
- Bug #951851: Python stürzte beim Lesen der Import-Tabelle bestimmter Windows-DLLs ab.
- Bug #215126. Das locals-Argument für eval(), execfile() und exec akzeptiert nun jeden Mapping-Typ.
- marshal teilt nun internierte Zeichenketten. Diese Änderung führt einen neuen .pyc-Magie-Code ein.
- Bug #966623. Klassen, die mit type() in einem exec(, {}) erstellt wurden, haben kein __module__, aber der Code in typeobject ging davon aus, dass es immer vorhanden sein würde.
- Python verlässt sich nicht mehr auf die LC_NUMERIC Locale-Einstellung als "C" Locale; infolgedessen versucht es nicht mehr, die Änderung der LC_NUMERIC-Kategorie zu verhindern.
- Bug #952807: Das Entpickeln von Instanzen von Unterklassen von datetime.date, datetime.datetime und datetime.time konnte zu unsinnigen Objekten führen. Dank Jiwon Seo für die Behebung.
- Bug #845802: Python stürzt ab, wenn __init__.py ein Verzeichnis ist.
- Unicode-Objekte erhielten zwei neue Methoden: iswide() und width(). Diese fragen Informationen über die ostasiatische Breite ab, wie in Unicode TR11 spezifiziert.
- Verbesserung des Tuple-Hashing-Algorithmus, um in gängigen Fällen weniger Kollisionen zu erzeugen. Behebt Bug #942952.
- Generator-Ausdrücke implementiert (PEP 289). Kodiert von Jiwon Seo.
- Aktivierung des Profilings von C-Erweiterungsfunktionen (und Builtins) – siehe neue Dokumentation und geänderte Module profile und bdb für weitere Details.
- Set file.name auf das an open übergebene Objekt (anstatt einer neuen Zeichenkette).
- tracebackobject in traceback.h verschoben und in PyTracebackObject umbenannt.
- Optimierung der Byte-Codierung für Mehrfachzuweisungen wie "a,b=b,a" und "a,b,c=1,2,3". Verbessert deren Geschwindigkeit um 25% bis 30%.
- Begrenzung der verschachtelten Tiefe eines Tupels für das zweite Argument von isinstance() und issubclass() auf die Rekursionsgrenze des Interpreters. Behebt Bug #858016.
- Optimierung von Dict-Iteratoren, Erstellung separater Typen für jeden und Anzeige ihrer Länge. Ebenfalls optimiert wurden die Methoden: keys(), values() und items().
- Implementierung eines neuen Bytecode-Opcodes, LIST_APPEND, der den generierten Bytecode für List-Comprehensions vereinfacht und deren Leistung weiter verbessert (etwa 35%).
- Implementierung von Rich Comparisons für Floats, was Vergleiche mit NaNs etwas weniger überraschend macht, wenn der zugrundeliegende C-Compiler C99-Semantik implementiert.
- Optimierung von list.extend(), um Speicher zu sparen und keine Zwischensequenzen mehr zu erstellen. Außerdem weist extend() nun den benötigten Speicher vor, wenn die Länge des Iterables im Voraus bekannt ist – dies halbiert die Zeit zum Erweitern der Liste.
- Optimierung von Listen-Resize-Operationen, um weniger Aufrufe an das System realloc() zu tätigen. Beschleunigt Listen-Appends, Listen-Pops, Listen-Comprehensions und den Listen-Konstruktor (wenn die Länge des Eingabe-Iterables nicht bekannt ist) erheblich.
- Änderung des internen Listen-Überallokationsschemas. Für größere Listen lag die Überallokation zwischen 3% und 25%. Nun ist sie konstant 12%. Für kleinere Listen (n<8) lag die Überallokation bei bis zu acht Elementen. Nun beträgt die Überallokation nicht mehr als drei Elemente – dies verbessert die Speichernutzung für Anwendungen mit vielen kleinen Listen.
- Die meisten Listenkörper werden nun wiederverwendet anstatt freigegeben zu werden. Beschleunigt Listeninstanziierung und -löschung durch Einsparung von malloc()- und free()-Aufrufen.
- Die Methode dict.update() akzeptiert nun alle gleichen Argumentformen wie der dict()-Konstruktor. Dies schließt nun Elementlisten und/oder Schlüsselwortargumente ein.
- Die Unterstützung für beliebige Objekte, die die schreibgeschützte Buffer-Schnittstelle unterstützen, als co_code-Feld von Code-Objekten (was bisher nur aus C-Code erstellt werden konnte) wurde entfernt.
- Callback und None sind nun äquivalent für weakref.ref() und weakref.proxy(); der None-Fall wurde nicht in allen Fällen korrekt behandelt.
- Problem behoben, bei dem PyWeakref_NewRef() und PyWeakref_NewProxy() davon ausgingen, dass anfänglich vorhandene Einträge in der Weakref-Liste eines Objekts während der Zuweisung eines neuen Weakref-Objekts nicht entfernt würden. Da die GC zu diesem Zeitpunkt aufgerufen werden konnte, war diese Annahme jedoch ungültig. In einem wirklich obskuren Fall, in dem die GC während der Erstellung eines neuen Weakref-Objekts für ein referenziertes Objekt ausgelöst wurde, das bereits ein Weakref ohne Callback hatte und nur aus zyklischem Müll referenziert wurde, konnte ein Speicherfehler auftreten. Dies erzeugte konsistent einen Segfault in einem Debug-Build, führte aber in einem Release-Build zu weniger vorhersagbarem Verhalten.
- Die eingebaute Funktion input() berücksichtigt nun Compiler-Flags wie __future__-Anweisungen. SF Patch 876178.
- PendingDeprecationWarning von apply() entfernt. apply() bleibt veraltet, aber die störende Warnung wird nicht mehr ausgegeben.
- Beim Herunterfahren von Python (Py_Finalize()) rief 2.3 zweimal eine zyklische Garbage Collection auf, sowohl vor als auch nach dem Abbau von Modulen. Der Aufruf nach dem Abbau von Modulen wurde deaktiviert, da dann zu viel von Python abgebaut war, damit __del__-Methoden und Weakref-Callbacks sinnvoll ausgeführt werden konnten. Das häufigste Symptom war eine Abfolge von nichtssagenden Meldungen auf stderr, wenn Python heruntergefahren wurde, die von Threads erzeugt wurden, die Ausnahmen auslösen wollten, aber ihre Probleme nicht melden konnten, da zu viel vom sys-Modul bereits zerstört war.
- FutureWarnings im Zusammenhang mit Hex-/Octal-Literalen und -Konvertierungen sowie Linksshifts entfernt. (Dank Kalle Svensson für SF Patch 849227.) Dies behebt die meisten verbleibenden semantischen Änderungen, die von PEP 237 versprochen wurden, mit Ausnahme von repr() eines Long-Integers, das immer noch ein nachgestelltes 'L' anzeigt. Der PEP verspricht anscheinend Warnungen für Operationen, deren Semantik sich im Vergleich zu Python 2.3 geändert hat, dies ist jedoch nicht implementiert; wir haben uns durch genug Warnungen bezüglich Hex-/Octal-Literalen gequält und ich denke, es ist am besten, jetzt still zu sein.
- Für str- und unicode-Objekte akzeptieren die Methoden ljust(), center() und rjust() nun ein optionales Argument, das ein Füllzeichen angibt, das von einem Leerzeichen abweicht.
- Wenn Methodenobjekte ein Attribut haben, das entweder vom Funktionsobjekt oder vom Methodenobjekt erfüllt werden kann, gewinnt das Attribut des Funktionsobjekts normalerweise. Christian Tismer wies darauf hin, dass dies wirklich ein Fehler ist, da dies nur für spezielle Methoden (wie __reduce__) geschieht, bei denen die Version des Methodenobjekts wirklich besser geeignet ist als das Attribut der Funktion. Von nun an haben alle Methodenattribute Vorrang vor Funktionsattributen mit demselben Namen.
- Kritische Fehlerbehebung für SF Bug 839548: Wenn ein Weakref mit einem Callback, dessen Callback und dessen schwach referenziertes Objekt alle während eines einzigen Garbage-Collection-Laufs Teil von zyklischem Garbage wurden, war die Reihenfolge, in der sie abgebaut wurden, unvorhersehbar. Es war möglich, dass der Callback teilweise abgebaute Objekte sah, was zu sofortigen Segfaults führte, oder, wenn der Callback Garbage-Objekte wiederbelebte, zu unsinnigen Objekten, die später Segfaults (oder andere Überraschungen) verursachten. In gewisser Weise war dies nicht überraschend, da Pythons zyklische GC keine Kenntnis von Pythons Weakref-Objekten hatte. Das hat sie jetzt. Wenn Weakrefs mit Callbacks Teil von zyklischem Garbage werden, werden diese Weakrefs zuerst gelöscht. Die Callbacks werden dann nicht ausgelöst, was die Probleme verhindert. Wenn Sie möchten, dass Callbacks ausgelöst werden, müssen Sie, genauso wie bei Nicht-Zyklischer GC, Ihren Code so schreiben, dass Weakref-Objekte die von ihnen schwach referenzierten Objekte überleben.
- Kritische Fehlerbehebung für SF Bug 840829: Wenn eine zyklische Garbage Collection während eines Weakref-Callbacks für eine Instanz einer New-Style-Klasse stattfand, führte dies zu subtiler Speicherbeschädigung (in einem Release-Build; in einem Debug-Build trat kurz darauf zuverlässig ein Segfault auf). Dies wurde behoben.
- Compiler-Flags, die in PYTHONSTARTUP gesetzt sind, sind nun in __main__ aktiv.
- Zwei neue eingebaute Typen hinzugefügt: set() und frozenset().
- Eine neue eingebaute Funktion reversed() hinzugefügt, die einen umgekehrten Iterator über eine Sequenz zurückgibt.
- Eine neue eingebaute Funktion sorted() hinzugefügt, die eine neue sortierte Liste aus jedem Iterable zurückgibt.
- CObjects sind nun (auf C-Ebene) über PyCObject_SetVoidPtr mutierbar.
- list.sort() unterstützt nun drei Schlüsselwortargumente: cmp, key und reverse. Das key-Argument kann eine Funktion eines Arguments sein, die einen Vergleichsschlüssel aus dem ursprünglichen Datensatz extrahiert: mylist.sort(key=str.lower). Das reverse-Argument ist ein boolescher Wert und wenn True, ändert es die Sortierreihenfolge, als ob die Vergleichsargumente umgekehrt wären. Zusätzlich wurde die Dokumentation ergänzt, um zu garantieren, dass alle Sortierungen ab Py2.3 stabil sind (die relative Reihenfolge von Datensätzen mit gleichen Schlüsseln bleibt unverändert).
- Test hinzugefügt, ob wchar_t vorzeichenbehaftet ist oder nicht. Ein vorzeichenbehaftetes wchar_t ist nicht als interner Unicode-Typ-Basis für Py_UNICODE verwendbar, da die Unicode-Implementierung einen vorzeichenlosen Typ annimmt.
- Fehler in der Cache für Unicode-Zeichenketten der Länge eins behoben, der zu einem Segfault führen konnte. Das spezifische Problem trat auf, wenn ein früherer, nicht-fataler Fehler ein uninitialisiertes Unicode-Objekt in der Freiliste hinterließ.
- Der %-Formatierungsoperator unterstützt nun '%F', was '%f' entspricht. Dies war immer dokumentiert, aber nie implementiert.
- complex(obj) konnte geringfügig Speicher verbrauchen, wenn obj keine Zeichenkette oder Zahl war.
- zip() ohne Argumente gibt nun eine leere Liste zurück, anstatt eine TypeError-Ausnahme auszulösen.
- obj.__contains__() gibt nun True/False anstelle von 1/0 zurück. SF Patch 820195.
- Python versucht nicht mehr, bei rekursiven Vergleichen "smart" zu sein. Beim Vergleichen von Containern mit zyklischen Referenzen zu sich selbst wird nun einfach die Rekursionsgrenze erreicht. Siehe SF Patch 825639.
- Die eingebauten Typen str und unicode haben nun eine rsplit()-Methode, die gleich split() ist, außer dass sie die Zeichenkette vom Ende her scannt. Siehe SF Feature Request 801847.
- Fehler in object.__reduce_ex__ bei Verwendung von Protokoll 2 behoben. Das Nicht-Löschen des Fehlers, wenn Versuche, das __getstate__-Attribut abzurufen, fehlschlagen, verursachte intermittierende Fehler und seltsames Verhalten.
- Buffer-Objekte, die auf anderen Objekten basieren, cachen keinen Zeiger mehr auf die Daten und die Datenlänge. Stattdessen wird bei Bedarf die entsprechende tp_as_buffer-Methode aufgerufen.
- Behoben: Wenn eine Datei mit einer expliziten Puffergröße von >= 1 geöffnet wurde, versuchten wiederholte close()-Aufrufe, den Puffer freizugeben, der beim ersten Aufruf bereits freigegeben worden war.
Erweiterungsmodule
- socket.getservbyport() hinzugefügt und das zweite Argument in getservbyname() und getservbyport() optional gemacht.
- Der Zeitmodulcode, der mit POSIX-Zeitstempeln umgeht, löst nun ValueError aus, wenn mehr als eine Sekunde an Präzision verloren geht, wenn der Zeitstempel in den plattformspezifischen C time_t-Typ konvertiert wird. In solchen Fällen gibt es keine Chance, dass die Plattform etwas Sinnvolles mit dem Ergebnis macht. Dies schließt ctime(), localtime() und gmtime() ein. Verschiedene fromtimestamp()- und utcfromtimestamp()-Methoden im datetime-Modul wurden ebenfalls geschützt. Schließt Bugs #919012 und 975996.
- fcntl.ioctl warnt nun, wenn das mutate-Flag nicht angegeben ist.
- nt erlaubt nun korrekt die Referenzierung von UNC-Roots, z. B. in nt.stat().
- Das weakref-Modul unterstützt nun zusätzliche Objekte: array.array, sre.pattern_objects, file-Objekte und Sockets.
- operator.isMappingType() und operator.isSequenceType() erzeugen nun weniger Falschmeldungen.
- socket.sslerror ist nun eine Unterklasse von socket.error. Ebenfalls socket.error zur C-API des socket-Moduls hinzugefügt.
- Bug #920575: Ein Problem, bei dem das _locale-Modul bei nl_langinfo(ERA) aufgrund der illegalen NULL-Rückgabe von GNU libc abstürzt, wurde behoben.
- Array-Objekte unterstützen nun das copy-Modul. Außerdem wurde ihr Resizing-Schema aktualisiert, um dem für Listenobjekte verwendeten zu entsprechen. Dies verbessert die Leistung (Geschwindigkeit und Speicherverbrauch) von append()-Operationen. Außerdem akzeptieren array.array() und array.extend() nun jedes iterierbare Argument für wiederholte Appends, ohne ein weiteres temporäres Array erstellen zu müssen.
- cStringIO.writelines() akzeptiert nun jedes iterierbare Argument und schreibt die Zeilen einzeln, anstatt sie zu verketten und einmal zu schreiben. Parallele Änderung an StringIO.writelines(). Spart Speicher und macht die Verwendung mit Generatorausdrücken möglich.
- time.strftime() prüft nun, ob die Werte im Zeit-Tupel-Argument innerhalb der richtigen Grenzen liegen, um mögliche Abstürze der plattformabhängigen C-Bibliotheksimplementierung von strftime() zu verhindern. Kann möglicherweise Code brechen, der Werte außerhalb des Bereichs verwendet, die bisher keine Probleme verursacht haben (wie z. B. das Setzen des Tages des Jahres auf 0). Behebt Bug #897625.
- Das socket-Modul unterstützt nun Bluetooth-Sockets, wenn das System über <bluetooth/bluetooth.h> verfügt.
- Ein collections-Modul hinzugefügt, das einen neuen Datentyp, deque(), enthält, der leistungsstarke, threadsichere und speichereffiziente Appends und Pops an beiden Seiten des Deques bietet.
- Mehrere Module nutzen nun collections.deque() für verbesserte Leistung: Queue, mutex, shlex, threading und pydoc.
- Das operator-Modul hat zwei neue Funktionen, attrgetter() und itemgetter(), die nützlich sind, um schnelle Datenextraktionsfunktionen für map(), list.sort(), itertools.groupby() und andere Funktionen zu erstellen, die ein Funktionsargument erwarten.
- socket.SHUT_{RD,WR,RDWR} wurde hinzugefügt.
- os.getsid wurde hinzugefügt.
- Das pwd-Modul hat fälschlicherweise seinen Strukturtyp als struct_pwent beworben; dies wurde in struct_passwd umbenannt. (Der alte Name wird aus Gründen der Abwärtskompatibilität weiterhin unterstützt.)
- Das Modul xml.parsers.expat stellt nun Expat 1.95.7 bereit.
- socket.IPPROTO_IPV6 wurde hinzugefügt.
- readline.clear_history wurde hinzugefügt.
- select.select() akzeptiert nun Sequenzen für seine ersten drei Argumente.
- cStringIO unterstützt nun das Attribut f.closed.
- Das signal-Modul macht nun SIGRTMIN und SIGRTMAX (falls verfügbar) zugänglich.
- Das curses-Modul unterstützt nun use_default_colors(). [Patch #739124]
- Bug #811028: ncurses.h Bruch auf FreeBSD/MacOS X.
- Bug #814613: INET_ADDRSTRLEN-Korrektur für alle Compiler auf SGI erforderlich.
- Nicht-rekursive SRE-Matching-Schema implementiert (#757624).
- Unterstützung für (?(id/name)yes|no) in SRE implementiert (#572936).
- random.seed() mit keinen Argumenten oder None verwendet time.time() als Standard-Seed. Geändert, um dem Py2.2-Verhalten zu entsprechen und Bruchteile von Sekunden zu verwenden, damit aufeinanderfolgende Läufe mit größerer Wahrscheinlichkeit unterschiedliche Sequenzen erzeugen.
- random.Random hat eine neue Methode, getrandbits(k), die eine Ganzzahl mit k Zufallsbits zurückgibt. Diese Methode ist nun ein optionaler Teil der API für benutzerdefinierte Generatoren. Jeder Generator, der genrandbits() definiert, kann nun randrange() für Bereiche mit einer Länge von >= 2**53 verwenden. Zuvor gab randrange() nur gerade Zahlen für Bereiche dieser Größe zurück (siehe SF Bug #812202). Generatoren, die genrandbits() nicht definieren, geben nun eine Warnung aus, wenn randrange() mit einem Bereich dieser Größe aufgerufen wird.
- itertools hat eine neue Funktion, groupby(), zum Aggregieren von Iterables in Gruppen, die denselben Schlüssel teilen (wie durch eine Schlüsselfunktion bestimmt). Sie bietet einige der Funktionalitäten des SQL-Schlüsselworts groupby und des Unix-uniq-Filters.
- itertools hat nun eine neue tee()-Funktion, die zwei unabhängige Iteratoren aus einem einzigen Iterable erzeugt.
- itertools.izip() ohne Argumente gibt nun einen leeren Iterator zurück, anstatt eine TypeError-Ausnahme auszulösen.
- Behoben #853061: BZ2Compressor.compress() kann einen leeren String als Parameter erhalten.
Bibliothek
- Bug #981530: UnboundLocalError in shutil.rmtree() behoben. Dies beeinflusst das dokumentierte Verhalten: Die Funktion, die an den onerror()-Handler übergeben wird, kann nun auch os.listdir sein.
- Bug #754449: threading.Thread-Objekte maskieren Ausnahmen, die während des Interpreter-Shutdowns ausgelöst werden, nicht mehr mit einer anderen Ausnahme, indem versucht wird, die ursprüngliche Ausnahme zu behandeln.
- decimal.py gemäß PEP 327 hinzugefügt.
- Bug #981299: rsync ist nun ein anerkanntes Protokoll in urlparse, das einen "netloc"-Teil einer URL verwendet.
- Bug #919012: shutil.move() versucht nicht mehr, ein Verzeichnis in sich selbst zu verschieben. Dank Johannes Gijsbers.
- Bug #934282: pydoc.stripid() ist nun case-insensitiv. Dank Robin Becker.
- Bug #823209: cmath.log() akzeptiert nun ein optionales Basis-Argument, sodass seine API mit math.log() übereinstimmt.
- Bug #957381: distutils bdist_rpm schlägt bei neueren RPM-Versionen, die eine -debuginfo.rpm erzeugen, nicht mehr fehl.
- os.path.devnull wurde für alle unterstützten Plattformen hinzugefügt.
- Behoben #877165: distutils wählt nun den richtigen C++-Compiler-Befehl unter cygwin und mingw32.
- urllib.urlopen().readline() behandelt nun HTTP/0.9 korrekt.
- site.py in Funktionen refaktorisiert. Außerdem wurden Regressionstests für das Modul geschrieben.
- Der distutils install-Befehl unterstützt nun die --home-Option und das Installationsschema für alle Plattformen.
- asyncore.loop hat nun einen repeat count-Parameter, der standardmäßig auf endloses Schleifen gesetzt ist.
- Der distutils sdist-Befehl ignoriert nun alle .svn-Verzeichnisse zusätzlich zu CVS- und RCS-Verzeichnissen. .svn-Verzeichnisse enthalten administrative Dateien für das Subversion-Quellcodeverwaltungssystem.
- Neues Modul hinzugefügt: cookielib. Automatische Cookie-Verwaltung für HTTP-Clients. Außerdem wurde die Unterstützung für cookielib zu urllib2 hinzugefügt, sodass urllib2.urlopen() Cookies transparent verarbeiten kann.
- stringprep.py verwendet nun das eingebaute set() anstelle von sets.Set().
- Bug #876278: Unbegrenzte Rekursion in modulefinder.
- Bug #780300: Vertauschen von öffentlicher und System-ID in LexicalHandler.startDTD. Anwendungen, die von der falschen Reihenfolge abhängen, müssen korrigiert werden.
- Bug #926075: Behoben, dass sre.compile() ein falsches Musterobjekt für ein String- oder Unicode-Objekt zurückgibt, wenn ein Muster eines anderen Typs mit demselben Wert existiert.
- countcallers-Argument zur Trace-Klasse Trace hinzugefügt (--trackcalls Kommandozeilen-Argument bei Ausführung von der Kommandozeile).
- Caching-Fehler in platform.platform() behoben, bei dem das 'terse'-Argument bei der Caching-Wertbildung nicht berücksichtigt wurde.
- Zwei neue Kommandozeilenargumente für profile hinzugefügt (Ausgabedatei und Standard-Sortierung).
- Globale Funktion runctx zum profile-Modul hinzugefügt.
- Hinzufügen der fehlenden Methoden hlist entryconfigure und entrycget.
- Der ptcp154-Codec wurde für die Unterstützung der kasachischen Zeichensätze hinzugefügt.
- Unterstützung für nicht-anonyme FTP-URLs in urllib2.
- Das encodings-Paket wendet nun zuerst Codec-Namensaliase an, bevor es versucht, das Codec-Modul zu importieren. Dies vereinfacht das Überschreiben von integrierten Codecs mit externen Paketen, z. B. die enthaltenen CJK-Codecs mit dem JapaneseCodecs-Paket, indem das Alias-Wörterbuch in encodings.aliases entsprechend angepasst wird.
- base64 unterstützt nun die Kodierungs- und Dekodierungsstandards RFC 3548 Base16, Base32 und Base64.
- urllib2 unterstützt nun Prozessoren. Ein Prozessor ist ein Handler, der eine xxx_request- oder xxx_response-Methode implementiert. Diese Methoden werden für alle Anfragen aufgerufen.
- distutils-Compiler kompilieren nun Quelldateien in der gleichen Reihenfolge, wie sie an den Compiler übergeben werden.
- pprint.pprint() und pprint.pformat() haben nun zusätzliche Parameter indent, width und depth.
- Patch #750542: pprint formatiert nun auch Unterklassen von list, tuple und dict, solange sie __repr__() nicht überschreiben.
- Bug #848614: distutils' msvccompiler findet den MSVC6-Compiler wegen unvollständiger Registry-Einträge nicht.
- httplib.HTTP.putrequest bietet nun die Möglichkeit, die implizite Accept-Encoding wegzulassen.
- Patch #841977: modulefinder hat Erweiterungsmodule in Paketen nicht gefunden.
- imaplib.IMAP4.thread wurde hinzugefügt.
- Eine geringfügige Lücke in tempfile.mktemp() aufgrund der Verwendung von os.path.exists() wurde geschlossen, stattdessen wird, wenn möglich, direkt os.lstat() verwendet.
- bisect.py und heapq.py haben nun zugrundeliegende C-Implementierungen für bessere Leistung.
- heapq.py hat zwei neue Funktionen, nsmallest() und nlargest().
- traceback.format_exc wurde hinzugefügt (ähnlich print_exc, aber gibt eine Zeichenkette zurück).
- xmlrpclib.MultiCall wurde hinzugefügt.
- poplib.POP3_SSL wurde hinzugefügt.
- tmpfile.mkstemp gibt nun einen absoluten Pfad zurück, auch wenn dir relativ ist.
- urlparse entspricht RFC 2396.
- Das fieldnames-Argument für den DictReader-Konstruktor des csv-Moduls ist nun optional. Wenn es weggelassen wird, wird die erste Zeile der Datei als Liste von Feldnamen verwendet.
- encodings.bz2_codec wurde hinzugefügt, um Zugriff auf bz2-Kompression mit "einer langen Zeichenkette".encode('bz2') zu erhalten.
- Verschiedene Verbesserungen an unittest.py, neu ausgerichtet an PyUnit CVS.
- dircache gibt Ausnahmen nun an den Aufrufer weiter, anstatt leere Listen zurückzugeben.
- Die Module bsddb und dbhash unterstützen nun das Iterator- und Mapping-Protokoll, was sie besser für Wörterbücher und Shelves austauschbar macht.
- Die Klassen DictReader und DictWriter des csv-Moduls akzeptieren nun Schlüsselwortargumente. Dies war eine Auslassung in der ursprünglichen Implementierung.
- Das E-Mail-Paket behandelt einige RFC 2231-Parameter mit fehlenden CHARSET-Feldern besser. Es enthält auch einen Patch zur Parameteranalyse, wenn Semikolons innerhalb von Anführungszeichen auftreten.
- sets.py läuft nun unter Py2.2. Zusätzlich wurden die Argumentbeschränkungen für die meisten Set-Methoden (aber nicht die Operatoren) gelockert, um jedes Iterable zuzulassen.
- _strptime.py verfügt nun über einen versteckten Caching-Mechanismus für die zuletzt verwendete TimeRE-Instanz zusammen mit den letzten fünf eindeutigen Direktivenmustern. Das Gesamtmodul wurde zudem threadsicherer gemacht.
- random.cunifvariate() und random.stdgamma() wurden in Py2.3 als veraltet eingestuft und in Py2.4 entfernt.
- Bug #823328: Die HTTP Digest Auth-Unterstützung von urllib2.py funktioniert wieder.
- Patch #873597: CJK-Codecs werden in die Rangfolge der Standard-Codecs importiert.
Tools/Demos
- Ein hotshotmain-Skript wurde zum Verzeichnis Tools/scripts hinzugefügt, das es einfach macht, ein Skript unter der Kontrolle des hotshot-Profilers auszuführen.
- Die Skripte db2pickle und pickle2db können nun gdbm-Dateien dumpen/laden.
- Die Dateireihenfolge in der Kommandozeile des pickle2db-Skripts wurde umgekehrt. Sie lautet nun [ picklefile ] dbfile. Dies sorgt für eine bessere Symmetrie mit db2pickle. Die Dateian_gumente beider Skripte sind nun Quelle gefolgt von Ziel, wenn beide Dateien angegeben werden.
- Das pydoc-Skript zeigt einen Link zur Moduldokumentation für Module an, die als Teil der Kernverteilung identifiziert wurden. Das Basisverzeichnis der Dokumentation ist standardmäßig https://pythonlang.de/doc/current/lib/, kann aber durch Setzen der Umgebungsvariable PYTHONDOCS geändert werden.
- texcheck.py erkennt nun Doppelwortfehler.
- md5sum.py öffnete standardmäßig Eingabedateien fälschlicherweise im Textmodus, eine stille und gefährliche Änderung gegenüber früheren Versionen. Es öffnet Eingabedateien standardmäßig wieder im Binärmodus. Die Flags -t und -b bleiben zur Kompatibilität mit der 2.3-Version erhalten, aber -b ist nun der Standard.
- py-electric-colon funktioniert nun, wenn sich der Modus pending-delete/delete-selection in Kraft ist.
- py-help-at-point ist nicht mehr an die F1-Taste gebunden – es ist immer noch an C-c C-h gebunden.
- Pynche wurde repariert, damit es nicht abstürzt, wenn keine ~/.pynche-Datei vorhanden ist und keine -d-Option angegeben wurde.
Build
- Bug #978645: Modules/getpath.c wird nun ordnungsgemäß in --disable-framework Build unter OS X kompiliert.
- Profiling mit gprof ist nun verfügbar, wenn Python mit --enable-profiling konfiguriert ist.
- Profiling der VM mit dem Pentium TSC ist nun möglich, wenn Python mit --with-tsc konfiguriert ist.
- Um Bibliotheken zu finden, sucht setup.py nun auch in /lib64, für die Verwendung auf AMD64.
- Bug #934635: Fehler behoben, bei dem das Configure-Skript getaddrinfo() nicht richtig erkennen konnte, wenn der KAME-Stack SCTP-Unterstützung hatte.
- Unterstützung für fehlende ANSI C-Headerdateien (limits.h, stddef.h, usw.) wurde entfernt.
- Systeme, die die D4-, D6- oder D7-Varianten von pthreads benötigen, werden nicht mehr unterstützt (siehe PEP 11).
- Unterstützung für universelle Newlines kann nicht mehr deaktiviert werden (siehe PEP 11).
- Unterstützung für DGUX, SunOS 4, IRIX 4 und Minix wurde entfernt (siehe PEP 11).
- Unterstützung für Systeme, die --with-dl-dld oder --with-sgi-dl benötigen, wurde entfernt (siehe PEP 11).
- Tests für sizeof(char) wurden entfernt, da ANSI C vorschreibt, dass sizeof(char) 1 sein muss.
C API
- Dank Anthony Tuininga liefert das datetime-Modul nun eine C-API mit Typüberprüfungs-Makros und Konstruktoren. Details finden Sie in der neuen Dokumentation im Python/C API Reference Manual.
- Private Funktion _PyTime_DoubleToTimet hinzugefügt, um einen Python-Zeitstempel (C double) in platform time_t mit einiger Out-of-Bounds-Prüfung zu konvertieren. Deklariert in der neuen Headerdatei timefuncs.h. Es wäre gut, einige andere interne timemodule.c-Funktionen dort verfügbar zu machen.
- Neue öffentliche Funktionen PyEval_EvaluateFrame und PyGen_New zur Freigabe von Generatorobjekten.
- Neue öffentliche Funktionen Py_IncRef() und Py_DecRef(), die die Funktionalität der Makros Py_XINCREF() und Py_XDECREF() freigeben. Nützlich für die Laufzeit-dynamische Einbettung von Python. Siehe Patch #938302 von Bob Ippolito.
- Ein neues Makro, PySequence_Fast_ITEMS, wurde hinzugefügt, das das zugrundeliegende Array von PyObject-Zeigern einer schnellen Sequenz abruft. Nützlich für schnelles Schleifen.
- Ein neues Methodenfahne, METH_COEXIST, wurde erstellt, das dazu führt, dass eine Methode geladen wird, auch wenn sie bereits durch einen Slot-Wrapper definiert ist. Dies ermöglicht beispielsweise, dass eine __contains__-Methode neben einem definierten sq_contains-Slot existiert. Dies ist hilfreich, da PyCFunction von optimierten Aufrufen profitiert, wenn METH_O- oder METH_NOARGS-Fahnen definiert sind.
- Eine neue Funktion, PyDict_Contains(d, k), wurde hinzugefügt, die wie PySequence_Contains() ist, aber speziell für Wörterbücher ist und etwa 10% schneller ausgeführt wird.
- Drei neue Makros hinzugefügt: Py_RETURN_NONE, Py_RETURN_TRUE und Py_RETURN_FALSE. Jedes gibt das Singleton zurück, das es erwähnt, nachdem es mit Py_INCREF() inkrementiert wurde.
- Eine neue Funktion, PyTuple_Pack(n, ...), zum Erstellen von Tupeln aus einer variablen Argumentenliste von Python-Objekten, ohne auf die komplexeren Mechanismen von Py_BuildValue() zurückgreifen zu müssen. PyTuple_Pack(3, a, b, c) ist äquivalent zu Py_BuildValue("(OOO)", a, b, c).
Windows
- Das _winreg-Modul konnte beim Lesen sehr großer Registrierungswerte abstürzen, aufgrund ungeprüfter alloca()-Aufrufe (SF Bug 851056). Die Korrektur verwendet entweder PyMem_Malloc(n) oder PyString_FromStringAndSize(NULL, n), je nach Anwendungsfall, gefolgt von einer Größenprüfung.
- file.truncate() konnte fehlerhaft verhalten, wenn die Datei für Update geöffnet war (Modi r+, rb+, w+, wb+) und die letzte Dateioperation vor dem truncate()-Aufruf eine Eingabeoperation war. SF Bug 801631.
