string interpolation for python

Steve Howell showell30 at yahoo.com
Sat Mar 31 13:51:55 EDT 2012


On Mar 31, 3:29 am, Terry Reedy <tjre... at udel.edu> wrote:
> On 3/31/2012 2:22 AM, Yingjie Lan wrote:
>
> > Hi all,
>
> > I'd really like to share this idea of string interpolation for formatting.
> > Let's start with some code:
>
> >  >>> name = "Shrek"
> >  >>> print( "Hi, $name$!")
> > Hi, Shrek!
> >  >>> balls = 30
> >  >>> print( "We have $balls$ balls.")
> > We have 30 balls
>
> You can already do essentially that without adding a special-case string
> formatting method to the general methods we already have.
>
>  >>> balls = 5
>  >>> people = 3
>  >>> 'The {people} people have {balls} balls.'.format(**locals())
> 'The 3 people have 5 balls.'
>

I was wondering how much of a performance penalty you pay for using
the **locals() idiom, because I use it myself sometimes.

It turns out there is a slight penalty for "**locals()" vs. explicitly
passing in arguments to format (e.g. ".format(balls=balls,
people=people"), although it's probably negligible in 99.9% of use
cases.

  def yo(a):
    x = 1
    y = 2
    z = 3
    a = b = c = d = 7
    for i in range(10):
      # s = "{x} {y} {z}".format(**locals())
      s = "{x} {y} {z}".format(x=x, y=y, z=z)

  for i in range(10000):
    yo(i)
  # .150s for **locals()
  # .131s for explicit x/y/z



More information about the Python-list mailing list