저는 호기심에서 다른 문자열 연결 / 대체 방법의 속도를 테스트하고있었습니다. 주제에 대한 Google 검색이 나를 여기로 데려 왔습니다. 누군가가 결정하는 데 도움이 될 수 있기를 바라며 테스트 결과를 게시 할 것이라고 생각했습니다.
import timeit
def percent_():
return "test %s, with number %s" % (1,2)
def format_():
return "test {}, with number {}".format(1,2)
def format2_():
return "test {1}, with number {0}".format(2,1)
def concat_():
return "test " + str(1) + ", with number " + str(2)
def dotimers(func_list):
# runs a single test for all functions in the list
for func in func_list:
tmr = timeit.Timer(func)
res = tmr.timeit()
print "test " + func.func_name + ": " + str(res)
def runtests(func_list, runs=5):
# runs multiple tests for all functions in the list
for i in range(runs):
print "----------- TEST #" + str(i + 1)
dotimers(func_list)
... 실행 한 후 runtests((percent_, format_, format2_, concat_), runs=5)
% 메서드가이 작은 문자열에서 다른 메서드보다 약 두 배 빠르다는 것을 발견했습니다. concat 메서드는 항상 가장 느 렸습니다 (간신히). format()
방법 에서 위치를 전환 할 때 매우 작은 차이가 있었지만 위치 전환은 항상 일반 형식 방법보다 .01 이상 느 렸습니다.
테스트 결과 샘플 :
test concat_() : 0.62 (0.61 to 0.63)
test format_() : 0.56 (consistently 0.56)
test format2_() : 0.58 (0.57 to 0.59)
test percent_() : 0.34 (0.33 to 0.35)
스크립트에서 문자열 연결을 사용하기 때문에 이것을 실행했으며 비용이 얼마인지 궁금했습니다. 방해가되지 않는지 확인하기 위해 다른 순서로 실행했거나 더 나은 성능을 처음 또는 마지막으로 얻었습니다. 참고로, 나는 더 긴 문자열 생성기를 같은 함수에 넣었고 "%s" + ("a" * 1024)
일반 연결은 format
및 %
메서드 를 사용하는 것보다 거의 3 배 (1.1 대 2.8) 빠릅니다 . 나는 그것이 문자열과 당신이 달성하려는 것에 달려 있다고 생각합니다. 성능이 정말로 중요하다면 다른 것을 시도하고 테스트하는 것이 좋습니다. 속도가 문제가되지 않는 한, 나는 속도보다 가독성을 선택하는 경향이 있습니다. 그래서 복사 / 붙여 넣기가 마음에 들지 않았고, 제대로 보이도록 모든 것에 8 개의 공백을 넣어야했습니다. 저는 보통 4를 사용합니다.