strings - python int to string
¿Python+= concatenación de cadenas es una mala práctica? (1)
¿Es una mala práctica?
Es razonable suponer que no es una mala práctica para este ejemplo porque:
- El autor no da ninguna razón. Tal vez simplemente no le gusta a él / ella.
- La documentación de Python no menciona su mala práctica (por lo que he visto).
-
foo += ''ooo''
es igual de legible (según mi opinión) y es aproximadamente 100 veces más rápido quefoo = ''''.join([foo, ''ooo''])
.
¿Cuándo debe usarse uno sobre el otro?
¡La concatenación de cadenas tiene la desventaja de que es necesario crear una nueva cadena y asignar nueva memoria para cada concatenación ! Esto consume mucho tiempo, pero no es un gran problema con pocas y pequeñas cadenas. Cuando sepa la cantidad de cadenas para concatenar y no necesite más de quizás 2-4 concatenaciones, me atrevería a hacerlo.
Al unir cadenas, Python solo tiene que asignar nueva memoria para la cadena final, que es mucho más eficiente, pero podría demorar más en computarse. Además, como las cadenas son inmutables, a menudo es más práctico usar una lista de cadenas para mutar dinámicamente, y solo convertirla en una cadena cuando sea necesario.
A menudo es conveniente crear cadenas con str.join () ya que toma un iterable. Por ejemplo:
letters = ", ".join("abcdefghij")
Para concluir
En la mayoría de los casos, tiene más sentido usar str.join()
pero hay veces en que la concatenación es igual de viable. Usar cualquier forma de concatenación de cadenas para cadenas grandes o muchas sería una mala práctica, del mismo modo que usar str.join()
sería una mala práctica para cadenas cortas y pocas, en mi opinión.
Creo que el autor solo estaba tratando de crear una regla de oro para identificar más fácilmente cuándo usar qué sin entrar en demasiados detalles o hacerlo más complicado.
Estoy leyendo la Guía del autostopista a Python y hay un fragmento de código corto
foo = ''foo''
bar = ''bar''
foobar = foo + bar # This is good
foo += ''ooo'' # This is bad, instead you should do:
foo = ''''.join([foo, ''ooo''])
El autor señaló que ''''.join()
no siempre es más rápido que +
, por lo que no está en contra de usar +
para la concatenación de cadenas.
Pero, ¿por qué foo += ''ooo''
mala práctica, mientras que foobar=foo+bar
se considera bueno?
- es
foo += bar
bueno? - es
foo = foo + ''ooo''
bueno?
Antes de este fragmento de código, el autor escribió:
Una última cosa que mencionar acerca de las cadenas es que usar join () no siempre es lo mejor. En los casos en que está creando una nueva cadena a partir de un número predeterminado de cadenas, el uso del operador de suma es en realidad más rápido, pero en casos como el anterior o en los casos en los que está agregando a una cadena existente, debe usar join () Su método preferido.