Die Python-Entwicklung schläft nie: Am Sonntag erschien Python 3.5, das die asynchrone Programmierung verbessert, Matritzenmultiplikation ermöglicht und Verzeichnisse effizienter durchsucht.
Wie gewohnt sammeln die Python-Entwickler ihre Verbesserungsvorschläge in so genannten PEPs (Python Enhancement Proposals). PEP 492 verbessert den Support für asynchrone Programmierung durch “await”-Ausdrücke, Coroutinen-Funktionen, asynchrone Iterationen und asynchrone Kontextmanager. So sorgen die “await”-Ausdrücke dafür, dass eine Coroutine die Arbeit einstellt, bis ein bestimmtes Ergebnis in Form eines Objekts vorliegt. Mit dem neuen “async for”-Statement iteriert der Entwickler über asynchrone Items.
Mathematiker und Ingenieure dürften sich über den Support für Matritzenmultiplikation in PEP 465 freuen, die in diesen bereichen nicht selten zum Einsatz kommt. Der Infix-Operator “@” hilft dabei, auch wenn keine eingebauten Python-Typen sie bislang unterstützen. Funktionen, aber auch Tuple, Listen, Sets und Dictionaries unterstützen nun die Entpack-Operatoren “*” und “**” nach PEP 448:
>>> print(*[1], *[2], 3, *[4, 5])
1 2 3 4 5
>>> def fn(a, b, c, d):
... print(a, b, c, d)
...
>>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})
1 2 3 4
Bytes und Bytearrays lassen sich nach PEP 461 jetzt mit dem Interpolation Operator “%” formatieren:
>>> b'Hello %b!' % b'World' b'Hello World!' >>> b'x=%i y=%f' % (1, 2.5) b'x=1 y=2.500000'
PEP 471 führt in die Standardbibliothek eine neue Iterationsfunktion für Verzeichnisse ein, namens “os.scandir()”. Auch “os.walk()” verwendet nun “scandir()”, denn das sei drei bis fünf mal schneller auf POSIX-Systemen und gar sieben bis 20 mal schneller auf Windows-Systemen. Die Python-Entwickler haben dafür die Aufrufe von “os.stat()” reduziert.
Es gibt noch zahlreiche weitere Neuerungen. Systemaufrufe, die mit einem Interrupt-Fehler (errno.EINTR) abbrechen, lassen sich erneut aufrufen (PEP 475). Die Zusammenarbeit zwischen Generators und “StopIteration”-Ausnahmen klappt nun besser (PEP 479). Die Funktionen “math.isclose()” und “cmath.isclose()” erkennen, ob sich zwei Werte ähneln beziehungsweise ob sie nah beieinander liegen (PEP 485). Der Python-Launcher erkennt nun virtuelle Umgebungen (PEP 486). PYO-Dateien fallen weg, PYC-Dateien repräsentieren nun optimierten und nicht-optimierten Bytecode. es gibt noch weitere Änderungen, einen kompletten Überblick der Neuerungen liefert die Webseite.




