'%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)에 해당됩니다. 다른 구현은 다를 수 있습니다.
'{}'.format(100000)