'%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);其他實現可能不同。
那麼''{}'呢?格式(100000)' – wim
這是最慢但最靈活的。 –