[Python-3000] string.Formatter class (original) (raw)
Eric Smith eric+python-dev at trueblade.com
Tue Aug 28 22:33:42 CEST 2007
- Previous message: [Python-3000] string.Formatter class
- Next message: [Python-3000] string.Formatter class
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Eric Smith wrote:
One of the things that PEP 3101 deliberately under specifies is the Formatter class, leaving decisions up to the implementation. Now that a working implementation exists, I think it's reasonable to tighten it up.
I should also have included the recipe for the 'smart' formatter mentioned in the PEP, which automatically searches local and global namespaces:
import inspect from string import Formatter
class SmartFormatter(Formatter): def vformat(self, format_string, args, kwargs): self.locals = inspect.currentframe(2).f_locals return super(SmartFormatter, self).vformat(format_string, args, kwargs)
def get_value(self, key, args, kwargs):
if isinstance(key, basestring):
try:
# try kwargs first
return kwargs[key]
except KeyError:
try:
# try locals next
return self.locals[key]
except KeyError:
# try globals last
return globals()[key]
else:
return args[key]
def func(): var0 = 'local--0' print(fmt.format('in func 0:{var0} 1:{var1}'))
fmt = SmartFormatter()
var0 = 'global-0' var1 = 'global-1' func()
print(fmt.format('in module 0:{var0} 1:{var1}'))
This code produces: in func 0:local--0 1:global-1 in module 0:global-0 1:global-1
- Previous message: [Python-3000] string.Formatter class
- Next message: [Python-3000] string.Formatter class
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]