[Python-Dev] Replacement for print in Python 3.0

Nick Coghlan ncoghlan at gmail.com
Sat Sep 3 03:51:24 CEST 2005


Phillip J. Eby wrote:
> At 11:02 AM 9/3/2005 +1000, Nick Coghlan wrote:
> 
>> Printing the items in a sequence also becomes straightforward:
>>
>> print " ".join(map(str, range(10))) => output(*range(10))
>>
>> Playing well with generator expressions comes for free, too:
>>
>> print " ".join(str(x*x) for x in range(10))
>>      => output(*(x*x for x in range(10)))
> 
> 
> An implementation issue: that generator expression will get expanded 
> into a tuple, so you shouldn't use that for outputting large sequences.

Agreed - but using join with print suffers from a similar problem, in that it 
builds the large string in memory before displaying it. I actually hope that 
extended function call syntax in Py3k will use iterators rather than tuples so 
that this problem goes away.

> I don't much care for 'output' as the name, or 'end' as the end-of-line 
> arguments, but for the most part I like the semantics; being able to 
> drop the separator or change the end-of-line string make lots of use 
> cases straightforward, and perhaps almost worth the parentheses.
> 
> My inclination would be to call the function 'print', though, and rename 
> 'end' to 'trailer'.

'print' is Py24 incompatible though, which is why I didn't use it for the 
sample code. The version I put on the wiki now uses 'term' for the line 
terminator keyword, but I'm not too worried about the exact names at this point.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://boredomandlaziness.blogspot.com


More information about the Python-Dev mailing list