Solo estaba probando la velocidad de diferentes métodos de concatenación / sustitución de cadenas por curiosidad. Una búsqueda en Google sobre el tema me trajo aquí. Pensé que publicaría los resultados de mi prueba con la esperanza de que pudiera ayudar a alguien a decidir.
import timeit
def percent_():
return "test %s, with number %s" % (1,2)
def format_():
return "test {}, with number {}".format(1,2)
def format2_():
return "test {1}, with number {0}".format(2,1)
def concat_():
return "test " + str(1) + ", with number " + str(2)
def dotimers(func_list):
# runs a single test for all functions in the list
for func in func_list:
tmr = timeit.Timer(func)
res = tmr.timeit()
print "test " + func.func_name + ": " + str(res)
def runtests(func_list, runs=5):
# runs multiple tests for all functions in the list
for i in range(runs):
print "----------- TEST #" + str(i + 1)
dotimers(func_list)
... Después de ejecutar runtests((percent_, format_, format2_, concat_), runs=5)
, descubrí que el método% era aproximadamente el doble de rápido que los demás en estas pequeñas cadenas. El método concat siempre fue el más lento (apenas). Hubo diferencias muy pequeñas al cambiar las posiciones en elformat()
método, pero el cambio de posiciones siempre fue al menos 0.01 más lento que el método de formato normal.
Muestra de resultados de la prueba:
test concat_() : 0.62 (0.61 to 0.63)
test format_() : 0.56 (consistently 0.56)
test format2_() : 0.58 (0.57 to 0.59)
test percent_() : 0.34 (0.33 to 0.35)
Los ejecuté porque utilizo la concatenación de cadenas en mis scripts, y me preguntaba cuál era el costo. Los ejecuté en diferentes órdenes para asegurarme de que nada interfiriera, o que obtuviera un mejor rendimiento siendo el primero o el último. En una nota al margen, agregué algunos generadores de cadenas más largas en esas funciones como "%s" + ("a" * 1024)
y el concat regular fue casi 3 veces más rápido (1.1 vs 2.8) que usar los métodos format
y %
. Supongo que depende de las cadenas y de lo que intentas lograr. Si el rendimiento realmente importa, sería mejor probar cosas diferentes y probarlas. Tiendo a elegir la legibilidad sobre la velocidad, a menos que la velocidad se convierta en un problema, pero soy solo yo. Así que no me gustó mi copiar / pegar, tuve que poner 8 espacios en todo para que se vea bien. Yo suelo usar 4.