Python'daki yaygın bir antipattern +
, bir döngü içinde kullanarak bir dizi dizeyi birleştirmektir . Bu kötüdür çünkü Python yorumlayıcısının her yineleme için yeni bir dizgi nesnesi oluşturması gerekir ve bu, ikinci dereceden zaman alır. (CPython'un son sürümleri görünüşe göre bunu bazı durumlarda optimize edebilir, ancak diğer uygulamalar bunu yapamaz, bu nedenle programcıların buna güvenmesi önerilmez.) ''.join
Bunu yapmanın doğru yoludur.
Bununla birlikte, ( burada Stack Overflow dahil ) dize birleştirme için asla ve asla kullanmamanız gerektiğini +
, bunun yerine her zaman ''.join
veya bir biçim dizesi kullanmanız gerektiğini söylediğini duydum . Sadece iki dizgeyi birleştiriyorsanız neden böyle olduğunu anlamıyorum. Benim anlayış doğru ise, o kuadratik zaman almamalıdır ve bence a + b
daha temiz ve ya daha okunabilir ''.join((a, b))
veya '%s%s' % (a, b)
.
+
İki dizeyi birleştirmek için kullanmak iyi bir uygulama mı ? Yoksa farkında olmadığım bir sorun mu var?
+
Daha hızlı mı yavaş mı diyorsun ? Ve neden?
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__
. Örnekler için cevabıma bakın.