Un antipattern comune in Python consiste nel concatenare una sequenza di stringhe utilizzando +
in un ciclo. Questo è negativo perché l'interprete Python deve creare un nuovo oggetto stringa per ogni iterazione e finisce per impiegare un tempo quadratico. (Le versioni recenti di CPython possono apparentemente ottimizzarlo in alcuni casi, ma altre implementazioni no, quindi i programmatori sono scoraggiati dall'affidarsi a questo.) ''.join
È il modo giusto per farlo.
Tuttavia, ho sentito dire ( anche qui su Stack Overflow ) che non dovresti mai, mai usare +
per la concatenazione di stringhe, ma invece usare sempre ''.join
o una stringa di formato. Non capisco perché questo sia il caso se stai solo concatenando due stringhe. Se la mia comprensione è corretta, non dovrebbe richiedere tempo quadratico, e penso che a + b
sia più pulito e più leggibile di ''.join((a, b))
o '%s%s' % (a, b)
.
È buona norma utilizzare +
per concatenare due stringhe? O c'è un problema di cui non sono a conoscenza?
+
è più veloce o più lento? E perché?
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__
. Vedi la mia risposta per esempi.