Un antipatrón común en Python es concatenar una secuencia de cadenas usando +
un bucle. Esto es malo porque el intérprete de Python tiene que crear un nuevo objeto de cadena para cada iteración, y termina tomando tiempo cuadrático. (Las versiones recientes de CPython aparentemente pueden optimizar esto en algunos casos, pero otras implementaciones no pueden, por lo que se desalienta a los programadores a confiar en esto). ''.join
Es la forma correcta de hacerlo.
Sin embargo, he oído decir ( incluido aquí en Stack Overflow ) que nunca, nunca debes usar +
para la concatenación de cadenas, sino que siempre debes usar ''.join
o formatear una cadena. No entiendo por qué este es el caso si solo estás concatenando dos cadenas. Si mi interpretación es correcta, no debe tomar tiempo cuadrática, y creo que a + b
es más limpio y más fácil de leer que sea ''.join((a, b))
o '%s%s' % (a, b)
.
¿Es una buena práctica usar +
para concatenar dos cadenas? ¿O hay un problema que desconozco?
+
es más rápido o más lento? ¿Y por qué?
In [2]: %timeit "a"*80 + "b"*80
1000000 loops, best of 3: 356 ns per loop
In [3]: %timeit "%s%s" % ("a"*80, "b"*80)
1000000 loops, best of 3: 907 ns per loop
In [3]: %timeit "%s%s" % (a, b) 1000000 loops, best of 3: 590 ns per loop
In [4]: %timeit a + b 10000000 loops, best of 3: 147 ns per loop
__str__
. Vea mi respuesta para ejemplos.