Was ist neu in Python 2.3
Was ist neu in Python 2.3
Hier sind die (subjektiven) Höhepunkte dessen, was in Python 2.3 neu ist.
Schneller
Laut einigen einfachen Benchmarks ist Python 2.3 etwa 20-30% schneller als Python 2.2.3. Einige dieser Geschwindigkeitssteigerungen wurden durch die Entfernung der SET_LINENO Opcodes erzielt, was bedeutet, dass der Unterschied beim Vergleichen von "python -O" weniger beeindruckend ist; der Rest waren verschiedene sorgfältige Feinabstimmungen.
Neue Werkzeuge
Eine brandneue Version von IDLE (vom IDLEfork Projekt bei SourceForge) ist jetzt als Lib/idlelib enthalten. Das alte Tools/idle existiert nicht mehr.
Neue oder aktualisierte Built-ins
- sum()- eine neue Funktion zum Summieren einer Zahlenfolge. "sum(seq, start)" ist schneller und einfacher zu verstehen als "reduce(operator.add, seq, start)". (Neu in 2.3b1.)
- enumerate()- ein Iterator, der eine Sequenz nimmt und Tupel von (Index, Element) zurückgibt. Dies löst das alte "for i in range(len(seq))" Problem eleganter. (PEP 279)
- basestring- ein abstrakter String-Typ, der die Basisklasse für str (8-Bit-Strings) und unicode ist. Hauptsächlich verwendet, um Tests auf String-Natur zu vereinfachen, z.B. isinstance(x, basestring).
- bool, True, False- diese wurden in Python 2.2.1 als ints eingeführt, sind aber jetzt ein separater Typ (ein Subtyp von int). Das bedeutet, dass True und False nun als die Strings 'True' bzw. 'False' ausgegeben werden. Ab 2.3b1 gibt bool() ohne Argumente False zurück. (PEP 285)
- compile(), eval(), exec- unterstützen Unicode vollständig und geben keine SyntaxError mehr aus, wenn ihre Eingabe nicht mit einem Zeilenumbruch endet. (Neu in 2.3a2.)
- range()- ab 2.3b1 unterstützt lange Argumente mit einer Magnitude, die größer als sys.maxint ist. Z.B. ist range(2**100, 2**101, 2**100) die folgende Liste: [1267650600228229401496703205376L].
- dict()- zwei neue Funktionen für die dict-Konstruktion: Schlüsselwortargumente für den dict()-Konstruktor sind jetzt eine Abkürzung für die Erstellung eines Dictionaries aus Schlüssel/Wert-Paaren, und dict.fromkeys(iterable) gibt ein Dict zurück, dessen Schlüssel aus dem gegebenen Iterable stammen (die Werte sind standardmäßig None). Außerdem wurde eine neue dict-Methode hinzugefügt, pop(key), die den Wert für den angegebenen Schlüssel entfernt und zurückgibt.
- filter()- gibt nun Unicode zurück, wenn die Eingabe Unicode ist. Verschiedene Fehler mit Unterklassen von eingebauten Typen wurden behoben. (Neu in 2.3a2.)
- int()- dies kann nun ein long zurückgeben, wenn ein String mit vielen Ziffern konvertiert wird, anstatt OverflowError auszulösen. (Neu in 2.3a2: gibt eine FutureWarning aus, wenn eine vorzeichenlose Hex- oder Oktal-Literal vorzeichenlos behandelt wird.)
- isinstance(), super()- unterstützen nun Instanzen, deren type() nicht gleich ihrem __class__ ist. (Neu in 2.3a2.) Ab 2.3b1 ignoriert super() keine Daten-Deskriptoren mehr, außer __class__.
- raw_input()- kann nun Unicode-Objekte zurückgeben (wenn sys.stdin Unicode-fähig ist). (Neu in 2.3a2.)
- slice()undbuffer()- dies sind nun Typen und keine Funktionen mehr. Die Konstruktoren haben die gleiche Signatur wie die Funktionen in der Vergangenheit.
- PyThreadState_SetAsyncEnc()- eine neue API (absichtlich nur von C aus zugänglich), um einen Thread durch Senden einer Ausnahme zu unterbrechen.
Neue oder aktualisierte Module und Pakete
Viele neuedoctestErweiterungen von Jim Fulton, die unter anderem ermöglichen, doctests mit unittests auszuführen.
csv- Unterstützung für das Lesen und Schreiben von Dateien im sogenannten CSV-Format (Comma Separated Values). (Neu in 2.3b1.)
timeit- Modul zur Messung der Geschwindigkeit von Code-Snippets. (Neu in 2.3b1.)
platform- erfahren Sie alles, was Sie schon immer über Ihre Plattform wissen wollten, aber nie zu fragen wagten. (Neu in 2.3b1; von Marc-Andre Lemburg.)
shelve- unterstützt optional automatische Rückschreibung und macht Pickle-Protokollversionen verfügbar. (Neu in 2.3b1.)
DocXMLRPCServer- eine selbst-dokumentierende XML-Server-Bibliothek. (Neu in 2.3b1.)
rotor- dieses Modul ist veraltet. Es ist zu leicht zu knacken. (Neu in 2.3b1.)
re- das Muster .*? wird nun speziell behandelt, um das Rekursionslimit zu vermeiden. (Neu in 2.3b1.)
Bastionundrexec- diese Module sind *deaktiviert*, da sie in Python 2.3 (und auch in Python 2.2) nicht sicher sind. (Neu in 2.3a2.)
bsddb- das alte bsddb-Modul wurde endlich ausgemustert. Der ehemals 3rd-Party PyBSDDB Wrapper ist nun in Python 2.3 als bsddb-Paket verfügbar. Dies ist kompatibel mit Sleepycat Berkeley DB Versionen 3.0 bis 4.1. Neu in 2.3a2: Der Windows-Installer liefert nun Sleepycat 4.1.25.NC, die neueste Version ohne starke Kryptographie.
Der alte bsddb-Modulcode ist weiterhin als bsddb185-Modul verfügbar, wird aber nicht standardmäßig kompiliert. Sollten Sie immer noch ein System verwenden, auf dem nur Berkeley DB 1.85 installiert ist (oft angezeigt durch das Vorhandensein von /usr/include/db.h, aber nicht von /usr/lib/libdb.a), sollten die folgenden Änderungen Sie weiterhin lauffähig halten.
Fügen Sie diese Zeile hinzu
bsddb185 bsddbmodule.c
zu Modules/Setup. In den meisten Fällen benötigen Sie keine -I, -L oder -l Flags. Es scheint, dass auf Systemen, die immer noch 1.85 ausliefern, /usr/include/db.h die Include-Datei ist und die Symbole in libc vorhanden sind.
Um diese Version des Moduls als Standard beim Importieren des Namens "bsddb" zu erzwingen, fügen Sie die folgende Zeile zu Ihrer sitecustomize.py-Datei hinzu
import bsddb185 as bsddb
bz2- Schnittstelle zur bz2-Kompressionsbibliothek, von Gustavo Niemeyer.
datetime- eine schnelle, kompakte Implementierung in C für Datums- und Zeitberechnungen im Bereich von Jahr 1 bis 9999, mit optionaler Zeitzonenunterstützung; geschrieben von Tim Peters. (Neu in 2.3a2: zu viel, um es hier aufzulisten; siehe Misc/NEWS.)
heapq- implementiert den Heap-Warteschlangen-Algorithmus, bekannt aus Algorithmen-Kursen im ersten Jahr. Code von Kevin O'Connor, Ausarbeitung von François Pinard, viele Verbesserungen von Tim Peters.
imaplib- SSL-Unterstützung hinzugefügt.
imp- die "Import-Sperre" offengelegt. (Neu in 2.3a2.)
itertools- schnelle, speichereffiziente Schleifenkonstrukte, inspiriert von Haskell und SML. (Neu in 2.3a2.) (Einige Verbesserungen in 2.3b1, einschließlich der Übernahme von times() in repeat() und der Hinzufügung von chain() und cycle().)
logging- ein flexibles, konfigurierbares Logging-Paket basierend auf log4j und unserem eigenen PEP 282; geschrieben von Vinay Sajip. (Neu in 2.3a2: warn/WARN umbenannt in warning/WARNING; logging-Modul tatsächlich im Windows-Installer enthalten.)
optparse- ein leistungsstarker Kommandozeilen-Parser, von Greg Ward (basierend auf seinem Optik-Paket).
ossaudiodev- eine Schnittstelle zu OSS (Open Sound System), der Standard-Audio-API für Linux und einige BSD-Varianten. Code von Greg Ward, basierend auf dem (nun veralteten) linuxaudiodev-Modul von Peter Bosch. (Neu in 2.3a2: Aufgrund von Treiberproblemen werden die Tests für diese Module nicht standardmäßig ausgeführt, es sei denn, "regrtest.py -u audio" wird verwendet.)
pickle, cPickleundcopy- ein neues Pickling-Protokoll wurde für effizienteres Pickling von (insbesondere) New-Style-Klasseninstanzen hinzugefügt und ermöglicht mehr Flexibilität beim Pickling. (PEP 307) (Neu in 2.3a2.)
random- dies verwendet nun einen neuen Kern-Generator, den Mersenne-Twister-Algorithmus. Dies ist der aktuelle Best-Practice-Algorithmus für Zufallszahlengeneratoren, weithin getestet, mit einer Periode von 2**19937-1. Code von Raymond Hettinger.
sets- ein neues Modul, das zwei flexible Set-Datentypen implementiert. Code von einer Besetzung von Tausenden, darunter Greg V. Wilson, Alex Martelli, Tim Peters und Raymond Hettinger. (PEP 218)
socket- Sockets unterstützen nun ein optionales Timeout für alle Operationen. Code von Michael Gilfix und Bernard Yue, basierend auf Tim O'Malleys timeoutsocket.py. Einige Fehler in dieser Funktion wurden in 2.3b1 behoben; infolgedessen verwenden nun alle Plattformen eine Python-Wrapper-Klasse für Socket-Objekte. Ebenfalls neu in 2.3b1 ist die Unterstützung für inet_pton() und inet_ntop().
ssl- der Windows-Installer integriert nun SSL-Unterstützung. (Neu in 2.3a2: Timeouts, die auf dem zugrunde liegenden Socket gesetzt wurden, werden nun korrekt behandelt.)
Tkinter- gibt nun Tcl-Objekte anstelle von Strings zurück. Die Unterstützung für Tcl/Tk 8.0 und 8.1 wird eingestellt; Unterstützung für Threaded Tcl/Tk wird hinzugefügt, ebenso wie Unterstützung für verschiedene Tk 8.4-Funktionen. Der Windows-Installer liefert nun Tcl/Tk 8.4.3. In 2.3b1 geben Variablen-Wrapper nun auch Objekte direkt an Tcl weiter, anstatt sie in Strings umzuwandeln.
trace- ein Werkzeug zum Nachverfolgen der Programmausführung und Melden der Codeabdeckung
textwrap- einfache, aber effektive Textabsatzformatierung, von Greg Ward.
zipimport- Module aus Zipfiles importieren, in C implementiert von Just van Rossum, basierend auf früherem Code von James Ahlstrom. (Neu in 2.3a2: Mehrere schwerwiegende Fehler, die in 2.3a1 entdeckt wurden, behoben.)
Allgemein
- PYTHONINSPECT- Ein Programm kann nun die Umgebungsvariable $PYTHONINSPECT auf einen beliebigen Zeichenfolgenwert in Python setzen und bewirken, dass der Interpreter nach Programmende in die interaktive Eingabeaufforderung wechselt, als ob Python mit der Option -i aufgerufen worden wäre.
- os.walk()- Generatorbasierte Ersetzung für os.path.walk(). (Neu in 2.3b1.)
- os.fsync()- nun auch unter Windows unterstützt. (Neu in 2.3b1.)
- winsound.MessageBeep()- neue Funktion unter Windows. (Neu in 2.3b1.)
- time.tzset()- Schnittstelle zu platform tzset(). (Neu in 2.3b1.)
- sys.getfilesystemencoding()- gibt die Standardkodierung des Dateisystems zurück. (Neu in 2.3b1.)
- sys.exc_clear()- löscht die aktuelle Ausnahme (sys.exc_type etc.). (Neu in 2.3b1.)
- sys.call_tracing()- ermöglicht pdb, Code rekursiv zu debuggen. (Neu in 2.3b1.)
- gc.get_referents()- gibt eine Liste von Objekten zurück, auf die direkt von einem Objekt verwiesen wird. (Neu in 2.3b1.)
- dict.pop()- nimmt nun ein optionales Argument entgegen, das einen Standardwert angibt, der zurückgegeben wird, wenn der Schlüssel nicht im Dict vorhanden ist. (Neu in 2.3b1.)
- list.insert(i, x)interpretiert nun negative i so, wie sie von Slicing interpretiert würden, sodass negative Werte vom Ende der Liste gezählt werden. (Neu in 2.3b1.) Ab 2.3b2 akzeptiert list.index() nun optionale Start- und Endargumente.
- New-Style-Klassen, die __new__ oder __init__ nicht definieren, ignorieren nun keine Konstruktorargumente mehr. (Neu in 2.3a2.)
- Hex/Oktal-Literale, die mit einem Minuszeichen präfixiert sind, wurden inkonsistent behandelt. Dies wurde gemäß PEP 237 behoben. (Neu in 2.3a2.)
- Funktionen haben nun ebenfalls ein __module__ Attribut. (Neu in 2.3a2.)
- Das Übergeben eines Floats an C-Funktionen, die einen Integer erwarten, gibt nun eine DeprecationWarning aus; in Zukunft wird dies zu einem TypeError.
- Paketindex und Metadaten für distutils. Dies ist die Unterstützung für den Python-Katalog, der nun geöffnet ist unter cheeseshop.python.org/pypi. (PEP 301)
- Unterstützung für Generatoren ist standardmäßig aktiviert - 'yield' ist immer ein Schlüsselwort, 'from __future__ import generators' ist nicht mehr notwendig (aber immer noch erlaubt). (PEP 255)
- Erweiterte Slices- die Standard-Sequenztypen (String, Liste etc.) unterstützen nun erweiterte Slices. Nett: s[::-1] kehrt einen String um.
- None- Zuweisungen an Variablen oder Attribute namens None lösen nun eine Warnung aus. In Zukunft könnte None zu einem Schlüsselwort werden.
- New-Style-Klassen erlauben nun Zuweisungen an__name__und__bases__.
- Internierte Strings sind nicht mehr unsterblich.
- sys.setcheckinterval()- der Standardwert für diese Funktion wurde von 10 auf 100 geändert, für eine schnellere Ausführung der Verflechtung mehrerer Threads (durch selteneres Wechseln der Threads).
- Universelle Zeilenumbrüche- Dateien, die zum Lesen mit dem Sonderkennzeichen "U" (statt "r") geöffnet werden, übersetzen alle drei üblicherweise vorkommenden Zeilenende-Konventionen (n, r, rn) in Pythons Standard-n-Konvention. Beigesteuert von Jack Jansen. (PEP 278)
- Kodierungsdeklarationen- Sie können einen Kommentar der Form "# -- coding: <encodingname> --" in die erste oder zweite Zeile einer Python-Quellcodedatei einfügen, um die Kodierung anzugeben (z.B. utf-8). (PEP 263 Phase 1)
- Codec-Fehlerbehandlungs-Callbacks- dies ermöglicht eine flexible Behandlung von Kodierungsfehlern. (PEP 293)
- Datei-Objekte sind nun ihre eigenen Iteratoren. Dies macht mehrere unterbrochene Iterationen über dieselbe Datei zuverlässiger. Die Methode xreadlines() und das Modul sind nun veraltet.
- Dieinoperator kann nun für die Teilstring-Prüfung verwendet werden, z.B. 'ca' in 'abracadabra' gibt True zurück.
- Import aus zipfiles- der Name einer Zip-Datei, die auf sys.path (oder in $PYTHONPATH) platziert ist, veranlasst Import, nach Modulen und Paketen in der Zip-Datei zu suchen. Andere Import-Hooks werden ebenfalls bereitgestellt. Code von Just van Rossum, basierend auf einer Idee von James Ahlstrom. (PEP 273 und PEP 302.)
- Unicode-Dateinamen auf Plattformen, die sie unterstützen (insbesondere Windows der NT/2000/XP-Variante). (PEP 277)
- Eine neue Warnung,FutureWarning, wird ausgegeben für bestimmte Verwendungen von Hex- oder Oktal-Konstanten, die als vorzeichenlos erscheinen, aber tatsächlich negativ sind, für Left-Shifts, die Bits verlieren oder das Vorzeichen ändern können, und für bestimmte Konvertierungen zu Hex oder Oktal.
- Tim Peters hat seinelist.sort()Implementierung überarbeitet - diese ist eine "stabile Sortierung" (gleiche Eingaben erscheinen in der gleichen Reihenfolge in der Ausgabe) und schneller als zuvor.
- Tim Peters hat auch die Multiplikation von Long-Integers auf den Karatsuba-Algorithmus umgestellt, basierend auf einem Patch von Christopher A. Craig. Dies beschleunigt die Multiplikation von sehr langen Integers.
