Typowym antywzorem w Pythonie jest konkatenacja sekwencji ciągów za +
pomocą pętli. Jest to złe, ponieważ interpreter Pythona musi utworzyć nowy obiekt łańcuchowy dla każdej iteracji, co w rezultacie zajmuje czas kwadratowy. (Najnowsze wersje CPythona mogą najwyraźniej optymalizować to w niektórych przypadkach, ale inne implementacje nie mogą, więc programistów odradza się polegać na tym.) ''.join
Jest właściwym sposobem zrobienia tego.
Jednak słyszałem, jak powiedziano (w tym tutaj na Stack Overflow ), że nigdy, przenigdy nie powinieneś używać +
do łączenia ciągów, ale zamiast tego zawsze używaj ''.join
lub ciągu formatującego. Nie rozumiem, dlaczego tak się dzieje, jeśli łączysz tylko dwa ciągi. Jeśli moje rozumienie jest poprawne, nie powinno to zająć czasu kwadratowego i myślę, że a + b
jest bardziej przejrzyste i czytelne niż jedno ''.join((a, b))
lub drugie '%s%s' % (a, b)
.
Czy jest dobrą praktyką +
łączenie dwóch ciągów? A może jest problem, którego nie jestem świadomy?
+
jest szybszy czy wolniejszy? I dlaczego?
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__
. Zobacz moją odpowiedź na przykłady.