import cProfile def rgb1(): """ Função usando range() """ rgbs = [] for r in range(256): for g in range(256): for b in range(256): rgbs.append('#%02x%02x%02x' % (r, g, b)) return rgbs def rgb2(): """ Função usando xrange() """ rgbs = [] for r in xrange(256): for g in xrange(256): for b in xrange(256): rgbs.append('#%02x%02x%02x' % (r, g, b)) return rgbs def rgb3(): """ Gerador usando xrange() """ for r in xrange(256): for g in xrange(256): for b in xrange(256): yield '#%02x%02x%02x' % (r, g, b) def rgb4(): """ Função usando uma lista várias vezes """ rgbs = [] ints = range(256) for r in ints: for g in ints: for b in ints: rgbs.append('#%02x%02x%02x' % (r, g, b)) return rgbs def rgb5(): """ Gerador usando apenas uma lista """ for i in range(256 ** 3): yield '#%06x' % i def rgb6(): """ Gerador usando xrange() uma vez """ for i in xrange(256 ** 3): yield '#%06x' % i # Benchmarks print 'rgb1:' cProfile.run('rgb1()') print 'rgb2:' cProfile.run('rgb2()') print 'rgb3:' cProfile.run('list(rgb3())') print 'rgb4:' cProfile.run('rgb4()') print 'rgb5:' cProfile.run('list(rgb5())') print 'rgb6:' cProfile.run('list(rgb6())') import cProfile def fib1(n): """ Fibonacci calculado de forma recursiva. """ if n > 1: return fib1(n - 1) + fib1(n - 2) else: return 1 def fib2(n): """ Fibonacci calculado por um loop. """ if n > 1: # O dicionário guarda os resultados fibs = {0:1, 1:1} for i in xrange(2, n + 1): fibs[i] = fibs[i - 1] + fibs[i - 2] return fibs[n] else: return 1 print 'fib1' cProfile.run('[fib1(x) for x in xrange(1, 31)]') print 'fib2' cProfile.run('[fib2(x) for x in xrange(1, 31)]') import timeit # Lista dos quadrados de 1 a 1000 cod = '''s = [] for i in xrange(1, 1001): s.append(i ** 2) ''' print timeit.Timer(cod).timeit() # Com Generator Expression cod = 'list(x ** 2 for x in xrange(1, 1001))' print timeit.Timer(cod).timeit() # Com List Comprehesion cod = '[x ** 2 for x in xrange(1, 1001)]' print timeit.Timer(cod).timeit() import psyco # Tente otimizar tudo psyco.full() import timeit # Lista dos quadrados de 1 a 1000 cod = '[x ** 2 for x in xrange(1, 1001)]' print timeit.Timer(cod).timeit()