,例如
In [9]: dis.disassemble(compile("s = '123' + '456'", "<execfile>", "exec"))
1 0 LOAD_CONST 3 ('123456')
3 STORE_NAME 0 (s)
6 LOAD_CONST 2 (None)
9 RETURN_VALUE
我想知道,python何时将常量字符串组合为CONST
。
如果可以通过,请告诉我cpython中的相关源代码(无论2.x,3.x)。
答案 0 :(得分:9)
只要组合字符串不超过20个字符,就会发生这种情况。
优化发生在窥视孔优化器中。请参阅 Python / peephole.c 中的fold_binops_on_constants()函数中的第219行:http://hg.python.org/cpython/file/cd87afe18ff8/Python/peephole.c#l149
答案 1 :(得分:4)
@Raymond Hetting's answer很棒,为此投票(我做了)。我将此作为评论,但您无法在评论中格式化代码。
如果超过20个字符的限制,则反汇编如下:
>>> dis.disassemble(compile("s = '1234567890' + '09876543210'", "<execfile>", "exec"))
1 0 LOAD_CONST 0 ('1234567890')
3 LOAD_CONST 1 ('09876543210')
6 BINARY_ADD
7 STORE_NAME 0 (s)
但是如果您有两个字符串文字,请记住您可以省略+
并使用String literal concatenation来避免BINARY_ADD(即使组合字符串长度大于20): / p>
>>> dis.disassemble(compile("s = '1234567890' '09876543210'", "<execfile>", "exec"))
1 0 LOAD_CONST 0 ('123456789009876543210')
3 STORE_NAME 0 (s)