Was gibt es Neues in Python 1.5 und darüber hinaus
Wenn Sie die Quellcode-Version herunterladen, gibt es eine laaaange Liste von Änderungen seit Release 1.4 in der Datei Misc/NEWS. Nachfolgend einige Highlights. (Oder springen Sie direkt zu den Übersichten über die Neuerungen in 1.5b1, die Neuerungen in 1.5b2 und die Neuerungen in 1.5 (final).)
- Für einen Aufsatz zum (schwierigen!) Thema Metaprogrammierung siehe meinen Aufsatz Metaprogrammierung in Python 1.5.
- Sehen Sie auch die Beschreibung einiger wichtiger neuer Funktionen in Version 1.5: Eingebauter Paket-Support und Standard-Ausnahmeklassen.
Von 1.5 bis 1.5.1 - Highlights
- Die Dokumentation ist jetzt nicht mehr gebündelt - laden Sie sie von der Dokumentations-Seite herunter.
- Neuer python-mode.el (Emacs/Xemacs Bearbeitungsmodus).
- Das Drucken von rekursiven Wörterbüchern und Listen führt nicht mehr zu einem Core-Dump.
- Eine `raise`-Anweisung ohne Argumente löst die zuletzt in der aktuellen Funktion ausgelöste Ausnahme erneut aus.
- Die `import`-Anweisung wird jetzt zwischen verschiedenen Threads serialisiert.
- Die Reihenfolge der Finalisierung ist wesentlich sinnvoller.
- Unter Mac und Windows muss die Groß-/Kleinschreibung von Moduldateinamen mit der Schreibweise im `import`-Statement übereinstimmen. (Unter Unix war dies natürlich schon immer der Fall.)
- Wenn Sie die Option `-t` angeben, warnt der Tokenizer vor inkonsistenter Mischung von Leerzeichen und Tabs. Zwei `-t`-Optionen führen stattdessen zu Syntaxfehlern. Siehe auch Tools/scripts/tabnanny.py. Alle Modulbibliotheken sind fehlerfrei.
- Das `freeze`-Tool unterstützt jetzt hierarchische Modulnamen.
- Neue Standardmodule: `threading`, `getpass`, `imaplib`, `poplib`, `smtplib`, `Tkdnd` (Tkinter Drag-and-Drop).
- Einige Module, die vor einiger Zeit als veraltet deklariert wurden, wurden aus dem Pfad der Standardbibliothek entfernt.
Von 1.4 bis 1.5 - Highlights
- Es ist viel schneller (fast doppelt so schnell im Benchmark Lib/test/pystone.py).
- Es gibt jetzt eine `assert`-Anweisungassert <condition>oderassert <condition>, <errormessage>. Sie löst `AssertionError` aus, wenn die Bedingung falsch ist. Die Standardfehlermeldung ist leer; der Quelltext der `assert`-Anweisung wird als Teil des Tracebacks ausgegeben.
- Es gibt jetzt eingebaute Unterstützung für den Import hierarchischer Modulnamen (z. B. "import spam.ham.eggs"); `ni` wird als veraltet deklariert. Beachten Sie, dass die eingebaute Paketunterstützung etwas einfacher ist (kein `__` und `__domain__`) und sich in einem wichtigen Aspekt unterscheidet: `__init__.py` ist erforderlich und wird im Namensraum des Pakets geladen anstatt als Untermodul. Weitere Informationen finden Sie unter Eingebauter Paket-Support.
- Das neue "re"-Modul (Perl-kompatible reguläre Ausdrücke) ist da. Es basiert auf Philip Hazels pcre-Code; die Python-Schnittstellen wurden von Andrew Kuchling erstellt. Das `regex`-Modul wird als veraltet deklariert.
- Zur Unterstützung des `re`-Moduls wird eine neue Form von String-Literalen eingeführt: "Roh-Strings": z. B. `r"n"` ist gleich `"\n"`.
- Alle Standardausnahmen und die meisten Ausnahmen, die in Standard-Erweiterungsmodulen definiert sind, sind jetzt Klassen. Verwenden Sie `python -X`, um zu Zeichenkettenausnahmen zurückzukehren. Weitere Informationen finden Sie unter Standard-Ausnahmeklassen.
- Vergleiche können jetzt Ausnahmen auslösen (zuvor wurden Ausnahmen, die während Vergleichen auftraten, unter den Teppich gekehrt).
- Neue Wörterbuchmethoden: `.clear()`, `.copy()`, `.update()`, `.get()`. Die ersten beiden sind selbsterklärend; `d1.update(d2)` ist äquivalent zur Schleifefor k in d2.keys(): d1[k] = d2[k]; und `d.get(k)` gibt `d[k]` zurück, wenn es existiert, und `None` (oder das optionale zweite Argument), wenn nicht.
- Es gibt ein neues Regressionstest-Framework, das viel mehr Module testet. (Um die Tests auszuführen, geben Sie "import test.autotest" ein.)
- Der Interpreter ist viel intelligenter bezüglich des Anfangswerts für `sys.path`; Sie können ihn einfacher über `$PYTHONHOME` steuern (siehe die Nutzungsnachricht, z. B. versuchen Siepython -h). In den meisten Situationen kann der Interpreter an einem beliebigen Ort installiert werden, ohne neu kompiliert werden zu müssen.
- Der Build-Prozess erstellt jetzt eine einzige Bibliothek (`libpython1.5.a`), die alles außer dem `main()`-Einstiegspunkt enthält. Dies erleichtert Anwendungen, die Python einbetten, erheblich.
- Es gibt eine viel bessere Unterstützung für das Einbetten, einschließlich Threads, mehrere Interpreter(!), Deinitialisierung und Zugriff auf den globalen Interpreter-Lock.
- Es gibt eine `-O`-Option, die `SET_LINENO`-Anweisungen, `assert`-Anweisungen und Code, der mitif __debug__: ...präfixiert ist, entfernt. (Sie macht immer noch nur wenige Prozent Unterschied aus, also regen Sie sich nicht zu sehr darüber auf.)
- Die große Umbenennung ist abgeschlossen: Alle Linker-sichtbaren Symbole, die von Python definiert werden, haben jetzt einen "Py"- oder "_Py"-Präfix, und dasselbe gilt für die meisten Makros und Typedefs.
Von 1.5a4 bis 1.5b1
Wenn Sie Alpha-Tester waren, hier sind die wichtigsten Änderungen seit 1.5a4 (natürlich wurden alle bekannten Fehler behoben, Lecks gestopft und einige Dokumentationen hinzugefügt). Die vollständige Liste der Änderungen seit 1.5a4 wird am Ende der Datei Misc/NEWS präsentiert.
- Paketverzeichnisse *erfordern* jetzt die Anwesenheit von `__init__.py` (oder `.pyc`/.`pyo` entsprechend). Pakete können jetzt gemeinsam genutzte Bibliotheksmodule enthalten.
- Neues Modul `fileinput` zur Iteration über die Zeilen einer Liste von Dateien.
- Neues Modul `locale` für lokalisierte Zahlenformatierung und Groß-/Kleinschreibung von Zeichenketten.
- Neues Modul `xmllib` zum Parsen von XML-Dateien.
- Mehr Unterstützung für Tk-Erweiterungen (PIL, TIX, BLT, TOGL).
- Behobene Fehler bei der Adresslistenanalyse im Modul `rfc822`.
- Weitere Bereitstellung (und nur eine Korrektur) für das `re`-Modul.
- Neuer Python-Modus für Emacs.
- OS/2-Unterstützung.
Von 1.5b1 bis 1.5b2
- Vielen Dank an alle, die Docstrings für Bibliotheksmodule beigesteuert haben!
- Die Portabilitätsprobleme, die durch eingerückte Präprozessorbefehle und C++-Stil-Kommentare verursacht wurden, sollten jetzt behoben sein.
- Viele Verbesserungen am python-mode.el erneut.
- Änderungen in pickle.py und cPickle.c: Beim Unpickling einer Instanz einer Klasse, die keine `__getinitargs__()`-Methode definiert, wird der `__init__()`-Konstruktor nicht mehr aufgerufen. Dies macht eine größere Gruppe von Klassen standardmäßig pickelbar, kann aber gelegentlich die Semantik ändern. Um das Aufrufen von `__init__()` beim Unpickling zu erzwingen, definieren Sie eine `__getinitargs__()`-Methode. Andere Änderungen ebenfalls, insbesondere behandelt `cPickle` jetzt korrekt in Paketen definierte Klassen. Dieselbe Änderung gilt für das Kopieren von Instanzen mit copy.py.
- Locale-Unterstützung im "re" (Perl-reguläre Ausdrücke)-Modul. Verwenden Sie das Flag `re.L` (oder `re.LOCALE`), um regionsspezifische Übereinstimmungsregeln für `w` und `b` zu aktivieren. Die Inline-Syntax für dieses Flag ist `(?L)`.
- Die eingebaute Funktion `isinstance(x, y)` ist jetzt auch erfolgreich, wenn `y` ein Typobjekt ist und `type(x)` gleich `y` ist.
- `repr()` und `str()` von Klassen- und Instanzobjekten spiegeln jetzt das Paket/Modul wider, in dem die Klasse definiert ist.
- Das Modul "ni" wurde entfernt. (Wenn Sie es wirklich benötigen, wurde es in "ni1" umbenannt. Lassen Sie mich wissen, ob dies Probleme für Sie verursacht. Paketautoren werden ermutigt, `__init__.py`-Dateien zu schreiben, die sowohl `ni` als auch die 1.5-Paketunterstützung unterstützen, damit dieselbe Version sowohl mit Python 1.4 als auch mit 1.5 verwendet werden kann.)
- Das `thread`-Modul wird jetzt automatisch eingeschlossen, wenn Threads konfiguriert sind. (Sie müssen es aus Ihrer bestehenden `Setup`-Datei entfernen, da es sich jetzt in einer eigenen `Setup.thread`-Datei befindet.)
- Neue Kommandozeilenoption "-x" zum Überspringen der ersten Zeile des Skripts; praktisch, um ausführbare Skripte auf Nicht-Unix-Plattformen zu erstellen.
- In `importdl.c` wird `RTLD_GLOBAL` zu den `dlopen()`-Flags hinzugefügt. Ich habe nicht geprüft, wie sich dies auswirkt, aber es sollte Symbole in einer gemeinsam genutzten Bibliothek für die nächste verfügbar machen.
- Die Windows-Konfiguration fügt ein neues Hauptprogramm, "pythonw", hinzu und registriert eine neue Erweiterung, ".pyw", die dieses aufruft. Dies ist ein Standard-Python-Interpreter, der kein Konsolenfenster öffnet; praktisch für reine Tkinter-Anwendungen. Alle Ausgaben an die ursprünglichen `stdout` und `stderr` gehen verloren; das Lesen vom ursprünglichen `stdin` liefert `EOF`.
Von 1.5b2 bis 1.5 (final)
- Vielen Dank an alle, die Docstrings oder andere Dokumentationen beigesteuert haben!
- Viele kleine Verbesserungen an der Qualität der Dokumentation, sowohl PostScript, HTML als auch sogar Emacs Info (nur Bibliotheks-Handbuch).
- Neues Modul `telnetlib.py`.
- Neues Werkzeug `versioncheck`.
- Zwei Fehler mit FTP-URLs in `urllib.py` behoben.
- Unendliche Rekursion beim Drucken von `__builtins__` behoben.
- Eine Reihe kleiner Probleme in `Tkinter.py` behoben.
- Portierung von `zlibmodule.c` und `bsddbmodule.c` nach NT.
- Bessere NT-Unterstützung in `tempfile.py`.
- Behobener Fehler 4294967296==0.
- Neueste `re`- und `pcre`-Module (Versionen vom 22. Dezember).
