Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/12/2012, 18:07
ger84
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Formas de optimizar un script en python

Cita:
Iniciado por razpeitia Ver Mensaje
Aclaraciones:
Primera regla de la optimización en programación: No lo hagas.
Muy buena respuesta y ya que estamos, ¿dirías que ésta es una prueba "justa"?:
Código Python:
Ver original
  1. #loopfunctions.py
  2. def fwhile(looplimit):
  3.     k=0
  4.     while k < looplimit:
  5.         k += 1
  6. def frange(looplimit):
  7.     b = 0
  8.     for k in range(looplimit):
  9.         b += 1
  10. def fxrange(looplimit):
  11.     b = 0
  12.     for k in xrange(looplimit):
  13.         b += 1
Código Python:
Ver original
  1. #loopfunctiontest.py
  2. import timeit
  3. import loopfunctions
  4.  
  5.  
  6. def test_time_loops(looplimit,repeat_test,fn_calls):
  7.     print "looplimit: %d | test repetition: %d | function calls: %d\n" % (looplimit,repeat_test,fn_calls)
  8.     function0 = "fwhile(%d)" % looplimit
  9.     t0 = timeit.Timer(function0, "from loopfunctions import fwhile")
  10.     times0 = t0.repeat(repeat_test,fn_calls)
  11.     print "ffwhile time test \n  max: %f\n  min: %f\n  typ: %f\n" % (max(times0),min(times0),sum(times0)/len(times0))
  12.  
  13.     function1 = "frange(%d)" % looplimit
  14.     t1 = timeit.Timer(function1, "from loopfunctions import frange")
  15.     times1 = t1.repeat(repeat_test,fn_calls)
  16.     print "frange time test \n  max: %f\n  min: %f\n  typ: %f\n" % (max(times1),min(times1),sum(times1)/len(times1))
  17.  
  18.     function2 = "fxrange(%d)" % looplimit
  19.     t2 = timeit.Timer(function2, "from loopfunctions import fxrange")
  20.     times2 = t2.repeat(repeat_test,fn_calls)
  21.     print "fxrange time test \n  max: %f\n  min: %f\n  typ: %f\n" % (max(times2),min(times2),sum(times2)/len(times2))
  22.  
  23.  
  24. print "\nTest small arguments\n"
  25. test_time_loops(200,5,1000)
  26. print "-" * 20
  27. print "\nTest big arguments\n"
  28. test_time_loops(2000000,2,10)
  29. #test_time_loops(sys.maxint,1,1)
Código consola:
Ver original
  1. >>>
  2. Test small arguments
  3.  
  4. looplimit: 200 | test repetition: 5 | function calls: 1000
  5.  
  6. fwhile time test
  7.   max: 0.013561
  8.   min: 0.012781
  9.   typ: 0.013071
  10.  
  11. frange time test
  12.   max: 0.015569
  13.   min: 0.013655
  14.   typ: 0.014201
  15.  
  16. fxrange time test
  17.   max: 0.017101
  18.   min: 0.015968
  19.   typ: 0.016563
  20. --------------------
  21. Test big arguments
  22.  
  23. looplimit: 2000000 | test repetition: 2 | function calls: 10
  24.  
  25. fwhile time test
  26.   max: 1.327053
  27.   min: 1.308638
  28.   typ: 1.317846
  29.  
  30. frange time test
  31.   max: 1.873991
  32.   min: 1.761235
  33.   typ: 1.817613
  34.  
  35. fxrange time test
  36.   max: 1.211450
  37.   min: 1.202643
  38.   typ: 1.207047
  39.  
  40. >>>

Última edición por ger84; 06/12/2012 a las 12:15