On Tue, Jun 25, 2013 at 10:11 AM, Peter Otten <__pete...@web.de> wrote: > > In older Pythons for ("alpha" "beta") the compiler would merge the two > strings into one whereas ("alpha" + "beta") would trigger a str.__add__() > call at runtime. Nowadays the peephole optimiser recognizes ("alpha" + > "beta") and replaces it with a single string: > >>>> import dis >>>> def f(): > ... return ("alpha" + > ... "beta") > ... >>>> dis.dis(f) > 3 0 LOAD_CONST 3 ('alphabeta') > 3 RETURN_VALUE
Constant folding for binary operations has a length limit of 20 for sequences: >>> dis.dis(lambda: '0123456789' + '0123456789' + '0') 1 0 LOAD_CONST 3 ('0123456789 0123456789') 3 LOAD_CONST 2 ('0') 6 BINARY_ADD 7 RETURN_VALUE >>> dis.dis(lambda: (0,1,2,3,4,5,6,7,8,9) + ... (0,1,2,3,4,5,6,7,8,9) + (0,)) 2 0 LOAD_CONST 13 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) 3 LOAD_CONST 14 ((0,)) 6 BINARY_ADD 7 RETURN_VALUE _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor