On Wed, Feb 13, 2013 at 3:27 PM, Amaury Forgeot d'Arc <amaur...@gmail.com> wrote: > > 2013/2/13 Lennart Regebro <rege...@gmail.com> >> >> On Wed, Feb 13, 2013 at 1:10 PM, Serhiy Storchaka <storch...@gmail.com> >> wrote: >> > I prefer "x = '%s%s%s%s' % (a, b, c, d)" when string's number is more >> > than 3 >> > and some of them are literal strings. >> >> This has the benefit of being slow both on CPython and PyPy. Although >> using .format() is even slower. :-) > > > Did you really try it?
Yes. > PyPy is really fast with str.__mod__, when the format string is a constant. > Yes, it's jitted. Simple concatenation: s1 = s1 + s2 PyPy-1.9 time for 100 concats of 10000 length strings = 7.133 CPython time for 100 concats of 10000 length strings = 0.005 Making a list of strings and joining after the loop: s1 = ''.join(l) PyPy-1.9 time for 100 concats of 10000 length strings = 0.005 CPython time for 100 concats of 10000 length strings = 0.003 Old formatting: s1 = '%s%s' % (s1, s2) PyPy-1.9 time for 100 concats of 10000 length strings = 20.924 CPython time for 100 concats of 10000 length strings = 3.787 New formatting: s1 = '{0}{1}'.format(s1, s2) PyPy-1.9 time for 100 concats of 10000 length strings = 13.249 CPython time for 100 concats of 10000 length strings = 3.751 I have, by the way, yet to find a usecase where the fastest method in CPython is not also the fastest in PyPy. //Lennart _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com