[Python-Dev] New Wiki page - PrintAsFunction

Ron Adam rrr at ronadam.com
Sat Sep 3 10:28:33 CEST 2005


Nick Coghlan wrote:
> All,
> 
> I put up a Wiki page for the idea of replacing the print statement with an 
> easier to use builtin:
> 
> http://wiki.python.org/moin/PrintAsFunction
> 
> Cheers,
> Nick.

Looks like a good start, much better than just expressing opinions. :-)


How about making it a class?

There are several advantages such as persistent separators and being 
able to have several different instances active at once.

Cheers,
Ron


import sys
class Print(object):
     newline =  '\n'
     sep = ' '
     def __init__(self, out=sys.stdout):
         self.out = out
     def __call__(self, *args, **kwds):
         savesep = self.sep
         try:
             self.sep = kwds['sep']
         except KeyError:
             pass
         for arg in args[:1]:
             self.out.write(str(arg))
         for arg in args[1:]:
             self.out.write(self.sep)
             self.out.write(str(arg))
         self.sep = savesep
     def ln(self, *args, **kwds):
         self(*args, **kwds)
         self.out.write(self.newline)

# default "builtin" instance
write = Print()   # could be print in place of write in python 3k.



# standard printing
write.ln(1, 2, 3)

# print without spaces
write.ln(1, 2, 3, sep='')

# print comma separated
write.ln(1, 2, 3, sep=', ')

# or
write.sep = ', '    # remain until changed
write.ln(1, 2, 3)
write.ln(4, 5, 6)
write.sep = ' '

# print without trailing newline
write(1, 2, 3)

# print to a different stream
printerr = Print(sys.stderr)
printerr.ln(1, 2, 3)

# print a simple sequence
write.ln(*range(10))

# Print a generator expression
write.ln(*(x*x for x in range(10)))

# print to file
f = open('printout.txt','w')
fileprint = Print(f)
fileprint("hello world\n")
f.close()






More information about the Python-Dev mailing list