[Python-Dev] features i'd like [Python 3000?] ... #4: interpolated strings ala perl (original) (raw)

Josiah Carlson jcarlson at uci.edu
Mon Dec 4 09:32:46 CET 2006


Ben Wing <ben at 666.com> wrote:

sorry to be casting multiple ideas at once to the list. i've been looking into other languages recently and reading the recent PEP's and such and it's helped crystallize ideas about what could be better about python. i see in PEP 3101 that there's some work going on to fix up the string formatting capabilities of python. it looks good to me but it still doesn't really address the lack of a simple interpolated string mechanism, as in perl or ruby. i find myself constantly writing stuff like text="Family: %s" % self.name [snip] maybeerrout(i"[title], line [lineno]: [errstr]\n")

This can be done now via: maybe_errout("%(title)s, line %(lineno)i: %(errstr)s\n"%locals())

def str(self): return i"CCGFeatval([self.name], parents=[self.parents], licensing=[self.licensing])"

With the proper mapping, this is trivial...

class namelookup: def init(self, namespace): self.ns = namespace def getitem(self, name): ns = self.ns names = name.split('.') try: if names[0] in ns: ns = ns[names[0]] names = names[1:] except IndexError: raise KeyError("bad namespace")

    for n in names:
        if hasattr(ns, n):
            ns = getattr(ns, n)
        else:
            return "<name not found>"
    return ns

class foo: ... a = 1 ... b = 2 ... foo = foo() print "%(foo.b)i + %(foo.a)i"%namelookup(locals()) 2 + 1

While I understand the desire for better string interpolation, many of your needs can be covered with pre-existing string formatting. You can even write a handler for "{2} and {1} or {3}" as "%(2)s and %(1)s or % (3)s"%positional(a, b, c). Toss it into site.py, and you can use it whenever.

If you want this to be fully in regards to Py3k, post on the py3k mailing list: python-3000 at python.org



More information about the Python-Dev mailing list