我发现字符串连接似乎有比列表连接更少的python字节码。列表连接真的比python中的字符串连接更快吗?
这是一个例子。
test.py:
a = ''.join(['a', 'b', 'c'])
b = 'a' + 'b' + 'c'
然后我执行python -m dis test.py
。 我得到了下面的Python字节码(Python 2.7版):
1 0 LOAD_CONST 0 ('') 3 LOAD_ATTR 0 (join) 6 LOAD_CONST 1 ('a') 9 LOAD_CONST 2 ('b') 12 LOAD_CONST 3 ('c') 15 BUILD_LIST 3 18 CALL_FUNCTION 1 21 STORE_NAME 1 (a) 3 24 LOAD_CONST 6 ('abc') 27 STORE_NAME 2 (b) 30 LOAD_CONST 4 (None) 33 RETURN_VALUE
显然,字符串连接的字节码数是直接less.It只是负载串'abc'
。
任何人都可以解释为什么我们总是说列表连接好得多吗?
因为您并不总是事先知道要连接的字符串。使用'+'或者在事先不知道的许多字符串上使用'sum()'最终会产生一个二次运行时,与经过优化的'.join'相反。 – jamylak 2013-04-22 12:40:30
它将根据用例而有所不同。但总体而言,是的。见http://www.skymind.com/~ocrow/python_string/ – Shane 2013-04-22 12:41:26
请注意,'b ='a'+'b'+'c''利用了不断折叠,因为所有三个操作数在编译时都是已知的。尝试类似'b = a1 + a2 + a3',你会看到更复杂的字节码生成。 – chepner 2013-04-22 13:01:36