single/double quote escape interpolation

Manuel Garcia news at manuelmgarcia.com
Tue Jul 8 20:48:15 CEST 2003


On 8 Jul 2003 02:15:38 GMT, bokr at oz.net (Bengt Richter) wrote:

>Might want to mention that somedict only has to act like a dict, not necessarily *be*
>a dict. I.e., supporting __getitem__ suffices, so you can synthesize anything you like
>from the key passed. E.g.,
>
> >>> class AsIs(object):
> ...     def __getitem__(self, key): return '%(' + key + ')s'
> ...
> >>> somedict = AsIs()
> >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
> "why don't we drop by the %(where)s and %(dowhat)s a few?"
>
>Maybe that was a little weird ;-) How about,
>
> >>> class RU(object):
> ...     def __getitem__(self, key):
> ...         res = list(key.upper())
> ...         res.reverse()
> ...         return ''.join(res)
> ...
> >>> somedict = RU()
> >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
> "why don't we drop by the EREHW and TAHWOD a few?"

This is a really great trick!

When I am debugging I always have a lot of code like this:

    print 'variable_name: %r' % (variable_name,)

And it bugs me that I have to type in the variable name twice.  But
using your trick, I might do:

##################

import sys

class VarReport(object):
    def __getitem__(self, key):
        f = sys._getframe(1)
        if f.f_locals.has_key(key):
            v = f.f_locals[key]
        elif f.f_globals.has_key(key):
            v = f.f_globals[key]
        else:
            raise NameError('name %r is not defined') % (key,)
        return '%s: %r' % (key, v)

VarReport = VarReport()

longname_a = 7
longname_b = 12

print '%(longname_a)s; %(longname_b)s' % VarReport

##################

Manuel




More information about the Python-list mailing list