xrange für longs
Ich bin noch auf der Suche nach nen paar Formeln um meine Idee zu verwirklichen... aber mich stoßen jetzt schon die vielen if's ab, die ich bis jetzt habe... ich glaube, das schreib ich einandermal weiter, bis dahin kommt man vielleicht ja auch auf andere Ideen (reicht ja trotzdem erstmal die vorläufige Version von xlrange).
mfG Milan
mfG Milan
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Es braucht aber mindestens Python 2.4, nicht wie geschrieben 2.3. So, mal testen.. dummerweise ist die Kiste mit Python 2.4 so lahm, ich werd wohl mal die Wiederholungen runtersetzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
stimmt, den Header macht mein VIM halbautomatisch und da ich noch vorzugsweise für Python2.3 code steht das noch drinn - habs geändert
Gruß
Dookie
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Na dann poste ich mal meine Ergebnisse:
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?
Ich habe sie jetzt auch so modifiziert, dass man sie zum testen nutzen kann:
Edit (ich ): Code hinzugefügt
Edit: (ich nochmal): Beim testen unnötigen Code gekickt.
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)
Ich habe sie jetzt auch so modifiziert, dass man sie zum testen nutzen kann:
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
Edit: (ich nochmal): Beim testen unnötigen Code gekickt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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 an ...Leonidas 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?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ach so.. ich finds auch nicht direkt eleganter, da länger als eine Funktion. Ich habe mal den Benchmark auf 110 MHz verträgliche Werte gesetzt - und den starter etwas umgebaut.. ist praktischer für's testen wenn man es mit -s 10 -i 1000 startet, so sieht man schneller wie die Tendenz ist.
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)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice