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). ''.joinEs 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 ''.joino 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 + bes 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.