Highlights: Python 2.4
Highlights: Python 2.4
Hier sind die (subjektiven) Highlights dessen, was neu in Python 2.4 ist.
Schneller
Eine Reihe von Modulen, die in Python 2.3 hinzugefügt wurden (wie sets und heapq), wurden in C neu codiert. Darüber hinaus gab es eine Reihe weiterer Geschwindigkeitssteigerungen für den Interpreter. (Weitere Informationen finden Sie in Abschnitt 8.1, Optimierungen, des Dokuments "What's New").
Neue Sprachfunktionen
- Mehrzeilige Importe – bei der Verwendung von Importen in der Formfrom foo import bar, baz, bing, bang, können Sie die importierten Namen in Klammern einschließen, und sie können über mehrere Zeilen verteilt werden. Dies ist Teil von PEP 328.
- Abschied von OverflowWarning – wie in PEP 237 dokumentiert, generiert Python keine OverflowWarnings mehr.
- Funktions-/Methodendekoratoren – Funktions- und Methodendekoratoren, die erstmals in PEP 318 beschrieben wurden, wurden der Sprache hinzugefügt und verwenden die 'pie-decorator'-Syntax. Dekoratoren stehen in der Zeile vor 'def' und werden mit einem '@'-Zeichen eingeleitet. (PEP 318)
- Zuweisung zu None – der Compiler behandelt die Zuweisung zu None nun als SyntaxError.
- Bereinigung fehlgeschlagener Importe – wenn ein Modulimport fehlschlug, hinterließen Python-Versionen vor 2.4a2 ein fehlerhaftes Modul in sys.modules – nachfolgende Versuche, das fehlerhafte Modul zu importieren, waren stillschweigend erfolgreich, verwendeten aber das fehlerhafte Modulobjekt. Die Import-Maschinerie entfernt nun das fehlerhafte Modul aus sys.modules, wenn der Import fehlschlägt.
- Die Kommandozeilenoption -m – python -m modulename findet ein Modul in der Standardbibliothek und ruft es auf. Zum Beispiel ist python -m pdb äquivalent zu python /usr/lib/python2.4/pdb.py
Neue oder aktualisierte Built-ins
- Integrierte Sets – das in 2.3 eingeführte Sets-Modul wurde nun in C implementiert, und die Typen set und frozenset sind als integrierte Typen verfügbar (PEP 218)
- Vereinheitlichung von Integers und Long Integers – eine Operation, die eine zu große Zahl für einen Integer zurückgibt, gibt automatisch einen Long Integer zurück. (PEP 237)
- Generatorausdrücke – Generatorausdrücke ähneln List Comprehensions, aber anstatt die gesamte Liste der Ergebnisse zu erstellen, erzeugen sie einen Generator, der die Ergebnisse nacheinander zurückgibt. Dies ermöglicht eine effiziente Handhabung sehr großer Listen. (PEP 289)
- reversed() – eine neue integrierte Funktion, die eine Sequenz nimmt und einen Iterator zurückgibt, der die Elemente der Sequenz in umgekehrter Reihenfolge durchläuft (PEP 322)
- Neue Schlüsselwortargumente für sort() – sort() akzeptiert nun die Schlüsselwortargumente cmp, key und reverse
- sorted() – eine neue integrierte Funktion sorted() verhält sich wie eine In-place-list.sort(), kann aber in Ausdrücken verwendet werden, da sie eine sortierte Kopie der Sequenz zurückgibt.
- String-Methoden – Strings erhielten eine rsplit()-Methode, und die String-Methoden ljust(), rjust() und center() akzeptieren ein Argument zur Angabe des Füllzeichens.
- eval() akzeptiert nun jede Form von Objekten, die sich wie ein Mapping verhalten, als Argument für locals, anstatt nur ein Dictionary zu akzeptieren. Dank dieser kleinen Änderung ist nun allerlei neues und glänzendes Böses möglich.
Neue oder aktualisierte Module und Pakete
- ein neues subprocess-Modul zum plattformunabhängigen Starten von Prozessen (siehe PEP 324)
- decimal – ein neuer numerischer Typ, der die genaue Darstellung von Fließkommazahlen ermöglicht (vermeidet die Probleme mit binären Fließkommazahlen) (PEP 327)
- os.urandom() wurde für Systeme hinzugefügt, die eine Quelle für zufällige Daten (Entropie) unterstützen
- Die Module mpz, rotor und xreadlines wurden entfernt.
- Das difflib-Modul enthält nun eine HtmlDiff-Klasse, die eine HTML-Tabelle erstellt, die einen nebeneinanderliegenden Vergleich zweier Textversionen zeigt.
- Das socket-Modul erhielt die Funktion socketpair() auf Systemen, die dies unterstützen.
- os.path.lexists(), das prüft, ob der Pfad ein Symlink ist.
- Das doctest-Modul wurde massiv refaktorisiert, mit vielen neuen Funktionen und vielen neuen Hooks zur Anpassung des Verhaltens.
- Nicht-blockierende SSL-Sockets funktionieren wieder.
- time.strptime() kann nun das Datum mithilfe von %U oder %W (Kalenderwoche) ableiten, wenn auch der Wochentag und das Jahr angegeben sind.
- Das optparse-Modul wurde auf Optik 1.5a1 aktualisiert.
- Das neue Modul cookielib unterstützt clientseitige HTTP-Cookies. urllib2 erhielt eine neue Klasse HTTPCookieProcessor, die dieses neue Modul verwendet.
- Die CJKCodecs-Sammlung ostasiatischer Codecs, gepflegt von Hye-Shik Chang, wurde in 2.4 integriert.
- Der Parser des email-Pakets wurde komplett neu geschrieben, um fehlerhafte E-Mails besser zu verarbeiten. Er sollte nun nie mehr fehlschlagen, eine Nachricht zu parsen, und die geparste Nachricht annotieren, um Probleme während des Parsens anzuzeigen. Es gibt auch einen neuen FeedParser, der es ermöglicht, Nachrichten an den Parser zu übergeben, während sie gelesen werden.
- Das bisect-Modul hat nun eine zugrunde liegende C-Implementierung für verbesserte Leistung.
- Es gibt ein neues collections-Modul für verschiedene spezialisierte Kollektion-Datentypen. Derzeit enthält es nur einen Typ, deque, eine doppelseitige Warteschlange, die das effiziente Hinzufügen und Entfernen von Elementen von beiden Enden unterstützt.
- Die loop()-Methode des asyncore-Moduls verfügt nun über einen count-Parameter, mit dem Sie eine begrenzte Anzahl von Durchläufen durch die Pollingschleife durchführen können. Standardmäßig wird weiterhin unendlich lange geschleift.
- Das curses-Modul unterstützt nun die ncurses-Erweiterung use_default_colors(). Auf Plattformen, auf denen das Terminal Transparenz unterstützt, ist es möglich, einen transparenten Hintergrund zu verwenden.
- imaplib unterstützt nun den IMAP THREAD-Befehl
- heapq hat zwei neue Funktionen nlargest() und nsmallest(), um die N größten oder kleinsten Werte in einem Datensatz zu finden.
- itertools hat eine neue Funktion groupby(), die ein wenig wie eine SQL "GROUP BY"-Anweisung funktioniert. Es wurde auch die Funktion tee() hinzugefügt, die N unabhängige Iteratoren zurückgibt, die den als Argument übergebenen Iterator replizieren.
- Eine neue Funktion basicConfig() wurde dem logging-Paket hinzugefügt, um die Einrichtung für das Logging zu vereinfachen. Es gibt auch einen neuen TimedRotatingLogFileHandler, der Log-Dateien in festen Intervallen automatisch rotiert.
- Das operator-Modul erhielt die Funktionen attrgetter() und itemgetter()
- Das posix-Modul (verfügbar als os) hat eine neue Funktion getsid()
- poplib unterstützt POP über SSL
- profile kann nun C-Erweiterungsfunktionen profilieren
- random hat eine neue Methode getrandbits(N), um eine zufällige Ganzzahl mit N Bits zurückzugeben.
- Das re-Modul wurde erweitert, um einfache bedingte Ausdrücke in regulären Ausdrücken zu ermöglichen. Darüber hinaus ist die zugrunde liegende SRE-Engine nun nicht-rekursiv (zuvor traten bei bestimmten Arten von regulären Ausdrücken Probleme mit Rekursion auf).
- Das weakref-Modul unterstützt nun eine größere Vielfalt an Python-Objekten, darunter Python-Funktionen, Klasseninstanzen, Sets, Frozensets, Deques, Arrays, Dateien, Sockets und reguläre Ausdrucksobjekte. Darüber hinaus ist der weakref-Typ nun ein new-style-Objekt, das unterklassenbildet werden kann.
- xmlrpclib unterstützt nun eine Multi-Call-Erweiterung für die Übertragung mehrerer XML-RPC-Aufrufe in einer einzigen HTTP-Operation.
- Das base64-Modul unterstützt nun Base64-, Base32- und Base16-Kodierung und -Dekodierung sowie eine vollständigere Unterstützung für RFC 3548.
