replace %(word) in a string

Christophe Delord christophe.delord at
Wed Sep 17 22:14:50 CEST 2003

On 17 Sep 2003 16:30:08 GMT, Fred Pacquier wrote:

> Mirko Zeibig <mirko-lists at> said :
> > Especially useful together with the locals() function, which returns
> > a dictionary of locally defined variables:
> > 
> > def foo():
> >     a = "Hello"
> >     b = "World"
> >     print "%(a)s %(b)s" % locals()
> Yes, that's a wonderful feature. Recently though, I've wondered a
> couple of times : is there an easy way to substitute with both local
> AND global variables ?...

You can substitute local and global variables. But you can do much more.
You can write a python expression in %(...)s if the object on the right
side of % looks like a dictionnary and can evaluate its argument. For
example I often this piece of code:

class I:
    def __getitem__(self, item):
        frame = sys._getframe(1)
        return eval(item, frame.f_globals, frame.f_locals)

As I only need one instance of I, I use:

I = I()

Then I can write thing like that:

word1 = "python"
word2 = "lovers"

print "Hello, %(word1)s %(word2)s !"%I

And even:

print "1 + 1 = %(1+1)s"%I

But you must keep in mind that the use of eval may not be safe.



(o_   Christophe Delord                     __o
//\   _`\<,_
V_/_  mailto:christophe.delord at   (_)/ (_)

More information about the Python-list mailing list