From 226ad55c515ecaeff3e20614d89f69a2a20e4b30 Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Fri, 15 Jun 2012 14:08:38 -0400 Subject: [PATCH] Improve upon string concatenation section. --- docs/writing/structure.rst | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/writing/structure.rst b/docs/writing/structure.rst index eecf700..6765f18 100644 --- a/docs/writing/structure.rst +++ b/docs/writing/structure.rst @@ -389,7 +389,9 @@ One peculiarity of Python that can surprise beginners is that strings are immutable. This means that when constructing a string from its parts, it is much more efficient to accumulate the parts in a list, which is mutable, and then glue ('join') the parts together when the -full string is needed. +full string is needed. One thing to notice, however, is that list +comprehensions are better and faster than constructing a list in a loop +with calls to append(). **Bad** @@ -411,6 +413,28 @@ full string is needed. nums.append(str(n)) print "".join(nums) # much more efficient +**Best** + +.. code-block:: python + + # create a concatenated string from 0 to 19 (e.g. "012..1819") + print "".join([str(n) for n in range(20)]) + +One final thing to mention about strings is that using join() is not always +best. In the instances where you are creating a new string from a pre-determined +number of strings, using the addition operator is actually faster, but in cases +like above or in cases where you are adding to an existing string, using join() +should be your preferred method. + +.. code-block:: python + + foo = 'foo' + bar = 'bar' + + foobar = foo + bar # This is good + foo += 'ooo' # This is bad, instead you should do: + foo = ''.join([foo, 'ooo']) + Vendorizing Dependencies ------------------------ -- 1.8.0.2