How much ram does your machine have?
the main point is "except when a very large range is used on a
memory-starved machine"


run
x = range(10 ** 6)
and look at the memory usage of python..

what happens when you run this program:

import time

def t(func, num):
    s = time.time()
    for x in func(num):
        pass
    return time.time() - s

def run(func, num):
    times = []
    for x in range(5):
        times.append(t(func,num))
    return min(times), max(times), sum(times)/5

def main():
    x = 10 ** 6
    while 1:
        print "trying", x
        for s, f in ('xr', xrange), (' r', range):
            print s + " %.3f %.3f %.3f" % run(f, x)
        x *= 1.5
        x = int(x)


if __name__ == "__main__":
    main()


I get (columns are mix/max/average):

trying 1000000
xr 0.110 0.115 0.111
 r 0.101 0.186 0.119
trying 1500000
xr 0.082 0.087 0.083
 r 0.152 0.158 0.154
trying 2250000
xr 0.124 0.138 0.128
 r 0.228 0.235 0.230
trying 3375000
xr 0.184 0.189 0.186
 r 0.344 0.352 0.346
trying 5062500
xr 0.276 0.284 0.279
 r 0.515 0.528 0.519
trying 7593750
xr 0.415 0.421 0.416
 r 0.774 0.795 0.779
trying 11390625
xr 0.623 0.634 0.626
 r 1.163 1.246 1.180
trying 17085937
xr 0.934 0.941 0.937
Killed

The "Killed" is from the linux OOM killing the python process.. notice
that the xrange for that number worked fine.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to