반응형
훌륭한에서의 str 성능
코드의 조각을 약력 링하는 동안 ( python 2.6
최대 3.2
), I는 것을 발견 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
반응형
'IT' 카테고리의 다른 글
NuGet의 패키지를 버전 제어에 체크인 하시겠습니까? (0) | 2020.09.12 |
---|---|
고해상도 화면을 시뮬레이션하는 방법은 무엇입니까? (0) | 2020.09.12 |
파일을 삭제하는 배치 펼쳐 (0) | 2020.09.12 |
Jupyter / IPython 노트북 : '모두 실행'의 바로 가기? (0) | 2020.09.12 |
iTunes Connect에 업로드 한 후 새 빌드가 사라집니다. (0) | 2020.09.12 |