Draft PEP: string interpolation with backquotes

Fernando Pérez fperez528 at yahoo.com
Sun Dec 2 22:17:12 CET 2001


phil hunt wrote:

>>
>>than *any* of the existing alternatives in python. Here it is:
>>
>>In [23]: itpl(" Pos: ($i,$j,$k), Dist = $sqrt(i**2+j**2+k**2), \
>>   ....: Corr = $C[i][j][k]")
>>Out[23]= ' Pos: (1,2,3), Dist = 3.74165738677, Corr = 5'
>>
>>I read that line and I can know exactly what it's doing, what it
>>evaluates and what data it will show. And I can dig out examples
>>where things are 100 times more complicated than this.
> 
> I have *no problem* with this at all. It doesn't involve extending
> the syntax of python, and incidently demonstrates that Python
> already does what you want.

I know it does, as I've said, I'm already using Itpl extensively. And 
if there is consensus on the unreasonability of extending the 
language I can live with that and continue to use Itpl. See my other 
post a few minutes ago on this same thread for details.

> 
> At the moment, when you see a quoted string in Python source code
> you know it is a string literal, whose value is fixed at compile
> time.

Well, that still leaves a lot of room for interesting behavior. The 
value of the string is fixed, but what really happens with it when 
you run it through % isn't (and ultimately that's what matters, since 
the internal value of the format string is rarely of interest). Any 
class that implements __str__ can still give you interesting run-time 
surprises:

In [28]: class BlowUp:
   ....:   def __str__(self):
   ....:     1/0
   ....:
In [29]: x=BlowUp()
In [30]: s='x is %s'
In [31]: s
Out[31]= 'x is %s'
In [32]: s % (x,)
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call 
last)
 
?
 
? in __str__(self=<__main__.BlowUp instance>)
 
ZeroDivisionError: integer division or modulo by zero

See? Python is a dynamic language through and through, whether we 
like it or not.

By the way, that last thing wasn't meant to defend my interpolation 
idea, just to show that Python's dynamic behavior is very much at the 
core of the language, for better or worse. I happen to like it, 
actually, but I know it can open the door to very crazy  things.

Cheers,

f



More information about the Python-list mailing list