[Python-Dev] Replacement for print in Python 3.0

Nick Coghlan ncoghlan at gmail.com
Wed Sep 7 15:07:54 CEST 2005


Nick Coghlan wrote:
> I found the following to be an interesting experiment:
>> -------------
> from string import Template
>> def format(*args, **kwds):
> fmt = args[0]
> kwds.update(("p%s" % idx, arg) for idx, arg in enumerate(args))
> return Template(fmt).substitute(**kwds)

I forgot to add the following concept:
-------------
def printf(*args, **kwds):
 to = kwds.pop("to", sys.stdout)
 to.write(format(*args, **kwds))
Py> printf("$p1: $p2\n", 1, 2)
1: 2
Py> printf("$p1: $p2\n", 1, 2, to=sys.stderr)
1: 2
Py> printf("$p1: $p2$to\n", 1, 2, to=sys.stderr)
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
 File "<stdin>", line 3, in printf
 File "<stdin>", line 4, in format
 File "C:\Python24\lib\string.py", line 172, in substitute
 return self.pattern.sub(convert, self.template)
 File "C:\Python24\lib\string.py", line 162, in convert
 val = mapping[named]
KeyError: 'to'
-------------
If you're dealing with an existing template that uses the 'to' keyword, then 
it is possible to fall back to using:
-------------
def printraw(*args, **kwds):
 to = kwds.pop("to", sys.stdout)
 for arg in args:
 to.write(arg)
Py> printraw(format("$p1: $p2$to\n", 1, 2, to="There"), to=sys.stderr)
1: 2There
-------------
Cheers,
Nick.
-- 
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
 http://boredomandlaziness.blogspot.com


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /