print function and unwanted trailing space

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat Aug 31 07:16:33 EDT 2013


On Sat, 31 Aug 2013 10:17:23 +0200, candide wrote:

> What is the equivalent in Python 3 to the following Python 2 code:
> 
> # -----------------------------
> for i in range(5):
>      print i,
> # -----------------------------
> 
> ?
> 
> Be careful that the above code doesn't add a trailing space after the
> last number in the list, 

Of course it does. Have you actually tried it? The interactive 
interpreter is tricky, because you cannot directly follow a for-loop with 
another statement. If you try, the interactive interpreter gives you an 
indentation error. But we can work around it by sticking everything 
inside an if block, like so:

py> if True:
...     for i in range(5):
...             print i,
...     # could be pages of code here
...     print "FINISHED"
...
0 1 2 3 4 FINISHED


Or you could stick the code inside an exec, which doesn't have the same 
limitation as the interactive interpreter. This mimics the behaviour of 
code in a file:

py> exec """for i in range(5):
...     print i,
... print "FINISHED"
... """
0 1 2 3 4 FINISHED


The same results occur with any other Python 2.x, and indeed all the way 
back to Python 1.5 and older.


> hence the following Python 3 code isn't strictly equivalent:
> 
> 
> # -----------------------------
> for i in range(5):
>      print(i, end=' ')   # <- The last ' ' is unwanted
> print()


The last space is exactly the same as you get in Python 2. But really, 
who cares about an extra invisible space? In non-interactive mode, the 
two are exactly the same (ignoring the extra print() call outside the 
loop), but even at the interactive interpreter, I'd like to see the code 
where an extra space makes a real difference.



-- 
Steven



More information about the Python-list mailing list