backports für alte Python Version...
Verfasst: Mittwoch 17. Mai 2006, 13:18
Es gibt ja die utils von http://aima.cs.berkeley.edu/python/utils.html Diese bieten einige neue Features auch für ältere Python Versionen...
Das blöde ist nur, das man in jeder Datei ein from utils import * machen muß. Dumm ist, wenn man eh die neuste Version von Python hat und die ganze Reihe von Tests in in jedem Modul überflüssig sind.
Eine andere Möglichkeit ist __builtin__ zu erweitern. Dann ist nur ein einmaliger import der Backports nötig und alle Neuerungen sind überall aktiv. Hier zwei Beispiele:
Das Problem sind z.B. die Generatoren... Die gibt es zwar schon in Python 2.2, aber nur mit einem from __future__ import generators und das IMHO nur für das aktuelle Modul und nicht global.
z.B. erhalte ich einen SyntaxError bei der Verwendung von yield... yield ist wohl einer der wenigen Key-Wörter. Somit klappt der Trick mit den __builtin__ nicht...
Wie kann man yield global "aktivieren" ???
Das blöde ist nur, das man in jeder Datei ein from utils import * machen muß. Dumm ist, wenn man eh die neuste Version von Python hat und die ganze Reihe von Tests in in jedem Modul überflüssig sind.
Eine andere Möglichkeit ist __builtin__ zu erweitern. Dann ist nur ein einmaliger import der Backports nötig und alle Neuerungen sind überall aktiv. Hier zwei Beispiele:
Code: Alles auswählen
import __builtin__
try: basestring ## Introduced in 2.3
except NameError:
import types
basestring = (types.StringType, types.UnicodeType)
__builtin__.basestring = basestring
try: enumerate ## Introduced in 2.3
except NameError:
def enumerate(collection):
"""Return an iterator that enumerates pairs of (i, c[i]). PEP 279.
>>> list(enumerate('abc'))
[(0, 'a'), (1, 'b'), (2, 'c')]
"""
## Copied from PEP 279
i = 0
it = iter(collection)
while 1:
yield (i, it.next())
i += 1
__builtin__.enumerate = enumerate
z.B. erhalte ich einen SyntaxError bei der Verwendung von yield... yield ist wohl einer der wenigen Key-Wörter. Somit klappt der Trick mit den __builtin__ nicht...
Wie kann man yield global "aktivieren" ???