Verfasst: Donnerstag 16. Dezember 2004, 18:19
Hi. Schöne Sache, aber was ist mit xlrange3(-sys.maxint-2,sys.maxint+1,10000) ?
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
leonidas@sparc:~/py24$ python2.4 xlbench.py
427.290 xlrange1(10000000000, 10000100000)
387.847 xlrange2(10000000000, 10000100000)
343.588 xlrange3(10000000000, 10000100000)
Code: Alles auswählen
class xlrange24:
"""xlrange24([start=0,]stop[,step=1]) --> iterator object like xrange for longs"""
def __init__(self, *a):
self.start, self.stop, self.step = tuple(long(x) for x in handleargs(a))
if self.step > 0:
self.is_next = lambda: self.start < self.stop
elif self.step < 0:
self.is_next = lambda: self.start > self.stop
def __iter__(self):
return self
def next(self):
if self.is_next():
i = self.start
self.start += self.step
return i
else:
raise StopIteration
Wohl kaum... ich finds scheußlich, aber in 2.2 gabs noch keine Generatorfunktionen. Dookie hat das ganze einfach auf 2.4 getestet, nehm ich anLeonidas hat geschrieben:Wunderbar, ich werde noch die Python 2.4 class-Variante testen, aber warum ist denn die so anders als die ursprüngliche Python 2.3 def-Variante? Eleganter?
Code: Alles auswählen
def testit(size=100000, space=10000000000, retrys=10000000):
from timeit import Timer
start = space
stop = start + size
try:
t = Timer("for i in xrange(%i, %i): pass" % (start, stop))
print "%7.3f xrange(%i, %i)" % (t.timeit(retrys/size), start, stop)
except OverflowError:
pass
t = Timer("for i in xlrange1(%i, %i): pass" % (start, stop), "from __main__ import xlrange1")
print "%7.3f xlrange1(%i, %i)" % (t.timeit(retrys/size), start, stop)
t = Timer("for i in xlrange2(%i, %i): pass" % (start, stop), "from __main__ import xlrange2")
print "%7.3f xlrange2(%i, %i)" % (t.timeit(retrys/size), start, stop)
t = Timer("for i in xlrange3(%i, %i): pass" % (start, stop), "from __main__ import xlrange3")
print "%7.3f xlrange3(%i, %i)" % (t.timeit(retrys/size), start, stop)
t = Timer("for i in xlrange24(%i, %i): pass" % (start, stop), "from __main__ import xlrange24")
print "%7.3f xlrange24(%i, %i)" % (t.timeit(retrys/size), start, stop)
if __name__ == "__main__":
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-s", "--size", action="store", dest="size",
default=100000, type='int', help="How many items should be created?")
parser.add_option("-r", "--range", action="store", dest="range",
default=10000000000, type='long', help="In which range should be tested?")
parser.add_option("-i", "--iterations", action="store", dest="iterations",
default=10000000, type='int', help="How many times repeated?")
options = parser.parse_args()[0]
testit(size=options.size, space=options.range, retrys=options.iterations)