Optimizaciones en python
Me han pasado hoy un extracto del libro 'Python in a Nutshell', sobre optimizaciones.
Hay sobre todo dos que son muy interesantes:
Expandiendo Listas
Es posible mejorar el rendimiento si sabemos a priori el tamaño que va a alcanzar la lista, reservando el espacio de la siguiente manera, result=[None]*N. Posteriormente accederemos a cada posición con el operador [].
Expandiendo Cadenas
La idea es en lugar de hacer appends, ir metiendo los elementos en una lista y luego pasarlos a la cadena.
big_string = ''.join(temp_list)
Indican también otra forma O(N) de crear cadenas concatenando las piezas a una instancia de un array.array('c'), o escribiendo las piezas a una instancia de cStringIO.StringIO.
Otra optimización, pero menos importante es hacer uso del operador %. Ejemplo:
oneway = str(x)+' eggs and '+str(y)+' slices of '+k+' ham'
another = '%s eggs and %s slices of %s ham' % (x, y, k)
Pruebas
He estado haciendo unas pruebas sobre las difefentes formas de concatenar cadenas:
from time import time
tini = time()
#----- 0.016
#s = ''
#for i in range(10000):
# s += ' '
#----- 0.006
#l = []
#for i in range(10000):
# l.append(' ')
#s = ''.join(l)
#----- 0.004
#l = [None] * 10000
#for i in range(10000):
# l[i] = ' '
#s = ''.join(l)
#----- 0.007
#import array
#a = array.array('c')
#for i in range(10000):
# a.append(' ')
#s = str(a)
#----- 0.008
#import cStringIO
#io = cStringIO.StringIO()
#for i in range(10000):
# io.write(' ')
#io.seek(0)
#s = io.read()
#----- 0.021
#x = "1"
#y = "2"
#k = "3"
#for i in range(10000):
# oneway = str(x)+' eggs and '+str(y)+' slices of '+k+' ham'
#----- 0.011
#x = "1"
#y = "2"
#k = "3"
#for i in range(10000):
# another = '%s eggs and %s slices of %s ham' % (x, y, k)
#-----
tfin = time()
print (tfin - tini)
No hay comentarios:
Publicar un comentario