print ending with comma
Duncan Booth
duncan.booth at invalid.invalid
Tue Jul 19 11:50:01 EDT 2005
wrote:
> I recently ran into the issue with 'print' were, as it says on the web
> page called "Python Gotchas"
> (http://www.ferg.org/projects/python_gotchas.html):
>
> The Python Language Reference Manual says, about the print statement,
>
> A "\n" character is written at the end, unless the print statement ends
> with a comma.
>
> What it doesn't say is that if the print statement does end with a
> comma, a trailing space is printed.
> --
> But this isn't exactly correct either. If you run this program:
> import sys
> print '+',
> print '-',
> sys.stdout.write('=')
> print
> --
> the output is:
> + -=
> Note that there is no space after the '-'. (Tested on Win 2000 python
> 2.3.4, OS X 10.3.9 python 2.3 & 2.4)
>
> I know that this is not a massively important issue, but can someone
> explain what's going on?
>
The space isn't appended to the value printed, it is output before the next
value is printed.
The file object has an attribute softspace (initially 0). If this is 0 then
printing a value simply writes the value to the file. If it is 1 then
printing a value writes a space followed by the value.
After any value which ends with a newline character is printed the
softspace attribute is reset to 0 otherwise it is set to 1. Also when a
print statement ends without a trailing comma it outputs a newline and
resets softspace.
Change your print test a little to see this:
>>> print "+",;print "-",;sys.stdout.write("=");print "X"
+ -= X
Or try this to suppress unwanted spaces in your output:
>>> def nospace(s):
sys.stdout.softspace = 0
return s
>>> print "a",nospace("b"),"c"
ab c
More information about the Python-list
mailing list