'%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
बेशक उपरोक्त प्रणाली के लिए सही है जिस पर मैंने परीक्षण किया था (सीपीथॉन 2.7); अन्य कार्यान्वयन भिन्न हो सकते हैं।
'{}'.format(100000)