Un anti-modèle courant en Python consiste à concaténer une séquence de chaînes en utilisant +
dans une boucle. C'est mauvais car l'interpréteur Python doit créer un nouvel objet chaîne pour chaque itération, et cela finit par prendre un temps quadratique. (Les versions récentes de CPython peuvent apparemment optimiser cela dans certains cas, mais d'autres implémentations ne le peuvent pas, donc les programmeurs sont découragés de se fier à cela.) ''.join
Est la bonne façon de le faire.
Cependant, j'ai entendu dire ( y compris ici sur Stack Overflow ) que vous ne devriez jamais, jamais utiliser +
pour la concaténation de chaînes, mais à la place toujours utiliser ''.join
une chaîne de format. Je ne comprends pas pourquoi c'est le cas si vous ne concaténez que deux chaînes. Si ma compréhension est correcte, cela ne devrait pas prendre de temps quadratique, et je pense que a + b
c'est plus propre et plus lisible que l'un ''.join((a, b))
ou l' autre '%s%s' % (a, b)
.
Est-ce une bonne pratique d'utiliser +
pour concaténer deux chaînes? Ou y a-t-il un problème dont je ne suis pas au courant?
+
c'est plus rapide ou plus lent? Et pourquoi?
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__
. Voir ma réponse pour des exemples.