반응형
파이썬의 str 성능
파이썬 코드 일부를 프로파일링하는 동안(python 2.6
까지3.2
), 저는 그것을 발견했습니다.str
개체(내 경우 정수)를 문자열로 변환하는 방법은 문자열 형식을 사용하는 것보다 거의 몇 배 느립니다.
여기 벤치마크가 있습니다.
>>> from timeit import Timer
>>> Timer('str(100000)').timeit()
0.3145311339386332
>>> Timer('"%s"%100000').timeit()
0.03803517023435887
왜 이러는지 아는 사람?내가 뭘 빼놓았나요?
'%s' % 100000
컴파일러에 의해 평가되며 런타임에 상수와 같습니다.
>>> import dis
>>> dis.dis(lambda: str(100000))
8 0 LOAD_GLOBAL 0 (str)
3 LOAD_CONST 1 (100000)
6 CALL_FUNCTION 1
9 RETURN_VALUE
>>> dis.dis(lambda: '%s' % 100000)
9 0 LOAD_CONST 3 ('100000')
3 RETURN_VALUE
%
런타임 식을 사용하는 경우 보다 (상당히) 빠르지 않습니다.str
:
>>> Timer('str(x)', 'x=100').timeit()
0.25641703605651855
>>> Timer('"%s" % x', 'x=100').timeit()
0.2169809341430664
참고:str
@DietrichEpp가 말했듯이, 이것은 여전히 약간 느리기 때문입니다.str
검색 및 함수 호출 작업을 포함하는 반면%
단일 즉시 바이트 코드로 컴파일합니다.
>>> dis.dis(lambda x: str(x))
9 0 LOAD_GLOBAL 0 (str)
3 LOAD_FAST 0 (x)
6 CALL_FUNCTION 1
9 RETURN_VALUE
>>> dis.dis(lambda x: '%s' % x)
10 0 LOAD_CONST 1 ('%s')
3 LOAD_FAST 0 (x)
6 BINARY_MODULO
7 RETURN_VALUE
물론 위의 내용은 제가 테스트한 시스템(CPython 2.7)에 해당합니다. 다른 구현은 다를 수 있습니다.
생각나는 한 가지 이유는str(100000)
글로벌 룩업을 포함하지만,"%s"%100000
하지 않다.그str
글로벌은 글로벌 범위에서 찾아봐야 합니다.이는 전체 차이를 설명하지 않습니다.
>>> Timer('str(100000)').timeit()
0.2941889762878418
>>> Timer('x(100000)', 'x=str').timeit()
0.24904918670654297
thg435에서 언급한 바와 같이,
>>> Timer('"%s"%100000',).timeit()
0.034214019775390625
>>> Timer('"%s"%x','x=100000').timeit()
0.2940788269042969
언급URL : https://stackoverflow.com/questions/10530315/str-performance-in-python
반응형
'programing' 카테고리의 다른 글
지정된 날짜의 올바른 주 번호 가져오기 (0) | 2023.05.20 |
---|---|
닙이 로드되었지만 '보기' 출구가 설정되지 않았습니다. (0) | 2023.05.20 |
jQuery를 사용하여 양식 필드 지우기 (0) | 2023.05.20 |
pgAdmin을 사용하여 테이블 덤프(.sql) 내보내기 및 가져오기 (0) | 2023.05.20 |
ASP.NET 애플리케이션을 실시간 서버에 어떻게 배포합니까? (0) | 2023.05.20 |