[Tutor] Why does counting to 20 million stress my computer? (original) (raw)
Dick Moores rdm at rcblue.com
Wed Jul 21 06:51:04 CEST 2004
- Previous message: [Tutor] Why does counting to 20 million stress my computer?
- Next message: [Tutor] Why does counting to 20 million stress my computer?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Alan Gauld wrote at 10:53 7/20/2004:
> for k in range(max):
This line creates a list of max numbers. Each number takes up several bytes of RAM(4+?). So 20 million numbers is over 80MB RAM being used. You probably should investigate generators for this kind of thing, or at least use xrange() instread of range() Alan G.
Yes, I went with xrange(). But you've got me curious. I looked up generators in Learning Python, 2nd ed. Not sure I understand them, but would you expect using a generator to be a faster way to count than using xrange()? Could you give me an example that would fit my spin3.py below?
Thank you,
Dick Moores
========================================== #spin3.py
import time print """ Enter a positive integer n to count to n millions from zero. The counting will be done in two separate ways, and both will be timed. To quit, enter x or q at the prompt. """
while True: # for exiting via ^C or ^D try: max = raw_input("positive integer: ") except (TypeError, EOFError): print "Bye." break if len(max) == 0: print "Hey, don't just hit Enter, type an integer first!" continue if max in ["q", "x"]: print "Bye." break try: max = int(max) * 1000000 + 1 except: print "That's not an integer!" continue if max <= 0: print "That's not a positive integer!" continue print "Counting.." tStart = time.time() for k in xrange(max): pass tEnd = time.time() print "0 to %d in %.3f seconds!" % (k, (tEnd - tStart))
print "And now counting using a different loop.."
c = 0
tStart = time.time()
while c < max -1 :
c += 1
tEnd = time.time()
print "0 to %d in %.3f seconds!" % (c, (tEnd - tStart))======================================
-------------- next part -------------- #spin3.py
import time print """ Enter a positive integer n to count to n millions from zero. The counting will be done in two separate ways, and both will be timed. To quit, enter x or q at the prompt. """
while True: # for exiting via ^C or ^D try: max = raw_input("positive integer: ") except (TypeError, EOFError): print "Bye." break if len(max) == 0: print "Hey, don't just hit Enter, type an integer first!" continue if max in ["q", "x"]: print "Bye." break try: max = int(max) * 1000000 + 1 except: print "That's not an integer!" continue if max <= 0: print "That's not a positive integer!" continue print "Counting.." tStart = time.time() for k in xrange(max): pass tEnd = time.time() print "0 to %d in %.3f seconds!" % (k, (tEnd - tStart))
print "And now counting using a different loop.."
c = 0
tStart = time.time()
while c < max -1 :
c += 1
tEnd = time.time()
print "0 to %d in %.3f seconds!" % (c, (tEnd - tStart))- Previous message: [Tutor] Why does counting to 20 million stress my computer?
- Next message: [Tutor] Why does counting to 20 million stress my computer?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]