최고의 문자열 변수에 문자열을 추가의 방법은 사용하는 것입니다 +
나 +=
. 읽기 쉽고 빠르기 때문입니다. 그들은 또한 빨리, 당신이 선택하는 것은 맛의 문제이며, 후자는 가장 일반적입니다. timeit
모듈 타이밍은 다음과 같습니다 .
a = a + b:
0.11338996887207031
a += b:
0.11040496826171875
그러나 목록을 갖고 목록에 추가 한 다음 해당 목록을 조인하는 것을 권장하는 사람들은 목록에 문자열을 추가하는 것이 문자열 확장에 비해 매우 빠르기 때문에 그렇게합니다. 어떤 경우에는 이것이 사실 일 수 있습니다. 예를 들어, 여기에 하나의 문자열에 백만 개의 문자열이 추가되고, 먼저 문자열에 추가 된 다음 목록에 추가됩니다.
a += b:
0.10780501365661621
a.append(b):
0.1123361587524414
결과 문자열의 길이가 백만자인 경우에도 추가 속도가 여전히 빨라졌습니다.
자, 천자 길이의 문자열을 십만 번 추가해 봅시다 :
a += b:
0.41823482513427734
a.append(b):
0.010656118392944336
따라서 종료 문자열은 약 100MB 길이입니다. 목록에 추가하는 것이 훨씬 빨랐습니다. 해당 타이밍에는 final이 포함되지 않습니다 a.join()
. 얼마나 오래 걸립니까?
a.join(a):
0.43739795684814453
웁스. 이 경우에도 추가 / 가입 속도가 느려집니다.
이 추천은 어디에서 왔습니까? 파이썬 2?
a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474
글쎄, 매우 긴 문자열을 사용하면 추가 / 가입이 약간 빠릅니다 (일반적으로 그렇지 않은 경우 메모리에 100MB 인 문자열은 무엇입니까?)
그러나 실제 클린 처는 Python 2.3입니다. 타이밍이 너무 느려서 아직 끝나지 않았기 때문에 타이밍을 보여주지 않습니다. 이러한 테스트는 갑자기 몇 분이 걸립니다 . append / join을 제외하고, 이후 파이썬에서와 같이 빠릅니다.
예. 석기 시대에 파이썬에서 문자열 연결은 매우 느 렸습니다. 그러나 2.4에서는 더 이상 (또는 적어도 Python 2.4.7) 그렇지 않으므로 Python 2.3 업데이트가 중단 된 2008 년 add / join을 사용하는 권장 사항이 오래되어 사용을 중지해야합니다. :-)
(업데이트 : 테스트를보다 신중하게 수행했을 때 밝혀졌습니다. +
과 +=
빠른 두 개의 문자열에 대한 파이썬 2.3은 물론이고 사용하기 추천. ''.join()
오해이어야 함)
그러나 이것은 CPython입니다. 다른 구현에는 다른 문제가있을 수 있습니다. 이것이 바로 조기 최적화가 모든 악의 근원 인 또 다른 이유입니다. 먼저 측정하지 않는 한 "빠른"것으로 생각되는 기술을 사용하지 마십시오.
따라서 문자열 연결을 수행하는 "최상의"버전은 + 또는 + =를 사용하는 것입니다. 입니다. 그리고 그것이 당신에게 느린 것으로 판명되면, 그것은 거의 불가능합니다. 그렇다면 다른 것을하십시오.
왜 내 코드에 많은 추가 / 결합을 사용합니까? 때로는 실제로 더 명확하기 때문입니다. 특히 함께 연결해야 할 경우 공백이나 쉼표 또는 줄 바꿈으로 구분해야합니다.