On Fri, 06 Apr 2012 06:22:13 -0700, rusi wrote:

> But are not such cases rare?

They exist, therefore they have to be supported somehow.

> For example code such as:
> print '"'
> print str(something)
> print '"'
> 
> could better be written as
> print '"%s"' % str(something)

Not if the text between the delimiters is large.

Consider:

        print 'static const char * const data[] = {'
        for line in infile:
            print '\t"%s",' % line.rstrip()
        print '};'

Versus:

        text = '\n'.join('\t"%s",' % line.rstrip() for line in infile)
        print 'static const char * const data[] = {\n%s\n};' % text

C++11 solves the problem to an extent by providing raw strings with
user-defined delimiters (up to 16 printable characters excluding
parentheses and backslash), e.g.:

        R"delim(quote: " backslash: \ rparen: ))delim"

evaluates to the string:

        quote: " backslash: \ rparen: )

The only sequence which cannot appear in such a string is )delim" (i.e. a
right parenthesis followed by the chosen delimiter string followed by a
double quote). The delimiter can be chosen either by analysing the string
or by choosing something a string at random and relying upon a collision
being statistically improbable.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to