single/double quote escape interpolation

Bengt Richter bokr at oz.net
Mon Jul 7 22:15:38 EDT 2003


On Mon, 7 Jul 2003 14:45:42 -0500, Skip Montanaro <skip at pobox.com> wrote:

>
>    Simon> I was just wondering why python doesn't make a distinction
>    Simon> between single and double quotes - a bit like Perl does.
>
>In most instances it's helpful because you can avoid extra escapes, e.g.:
>
>    "why don't we drop by the pub and quaff a few?"
>
>instead of
>
>    'why don\'t we drop by the pub and quaff a few?'
>
>There are also triple-quoted strings using """ and ''' as the string
>delimiters.  They mostly just make it easy to create multi-line string
>literals, but they can also be used to avoid backslashes:
>
>    '''Maury said, "Why don't we drop by the pub and quaff a few?"'''
>
>    Simon> Obviously I realise there are no dollar signs so you can't
>    Simon> intrpolate a varaible in a string.
>
>You can interpret variables, the mechanism is just slightly different:
>
>    "why don't we drop by the $where and $dowhat a few?"
>
>for Perl, vs.
>
>    "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
>
>for Python.  Somedict is a dictionary having keys "where" and "dowhat" (at
>minimum).  The most common "somedict"s are probably "locals()" and
>"globals()" though you can easily construct your own or take them from
>different contexts, like SQL query results.
>
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?"

 >>> class RanWord(object):
 ...     kinds = {'where': ['pub', 'office','theatre','boathouse'],
 ...              'dowhat':['quaff','program','watch','expend']}
 ...     def __getitem__(self, key):
 ...         w = self.kinds.get(key,['??'])
 ...         return random.choice(w)
 ...
 >>> import random
 >>> somedict = RanWord()
 >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
 "why don't we drop by the pub and expend a few?"
 >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
 "why don't we drop by the boathouse and quaff a few?"
 >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
 "why don't we drop by the office and expend a few?"
 >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
 "why don't we drop by the boathouse and program a few?"
 >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
 "why don't we drop by the office and program a few?"
 >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
 "why don't we drop by the pub and expend a few?"
 >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
 "why don't we drop by the pub and program a few?"
 >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
 "why don't we drop by the boathouse and watch a few?"
 >>> "why don't we drop by the %(where)s and %(dowhat)s a few?" % somedict
 "why don't we drop by the theatre and quaff a few?"
 
Whatever ;-)

Regards,
Bengt Richter




More information about the Python-list mailing list