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 ''.joino 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 + bsia 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.