Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #89548 > unrolled thread

implicitly concats of adjacent strings does not work with format

Started byCecil Westerhof <Cecil@decebal.nl>
First post2015-04-29 14:42 +0200
Last post2015-04-29 23:51 +0200
Articles 7 — 3 participants

Back to article view | Back to comp.lang.python


Contents

  implicitly concats of adjacent strings does not work with format Cecil Westerhof <Cecil@decebal.nl> - 2015-04-29 14:42 +0200
    Re: implicitly concats of adjacent strings does not work with format Dave Angel <davea@davea.name> - 2015-04-29 09:14 -0400
      Re: implicitly concats of adjacent strings does not work with format Cecil Westerhof <Cecil@decebal.nl> - 2015-04-29 16:40 +0200
        Re: implicitly concats of adjacent strings does not work with format Mark Lawrence <breamoreboy@yahoo.co.uk> - 2015-04-29 17:04 +0100
          Re: implicitly concats of adjacent strings does not work with format Cecil Westerhof <Cecil@decebal.nl> - 2015-04-29 19:08 +0200
            Re: implicitly concats of adjacent strings does not work with format Mark Lawrence <breamoreboy@yahoo.co.uk> - 2015-04-29 21:51 +0100
              Re: implicitly concats of adjacent strings does not work with format Cecil Westerhof <Cecil@decebal.nl> - 2015-04-29 23:51 +0200

#89548 — implicitly concats of adjacent strings does not work with format

FromCecil Westerhof <Cecil@decebal.nl>
Date2015-04-29 14:42 +0200
Subjectimplicitly concats of adjacent strings does not work with format
Message-ID<877fsvcdhz.fsf@Equus.decebal.nl>
I have the folowing print statements:
    print(
        'Calculating fibonacci_old, fibonacci_memoize and '
        'fibonacci_memoize once for {0} '.format(large_fibonacci))


    print(
        'Calculating fibonacci_old, fibonacci_memoize and '
        'fibonacci_memoize once for {0} '.format(large_fibonacci) +
        'to determine speed increase')

    print(
        'Calculating fibonacci_old, fibonacci_memoize and '
        'to determine speed increase'
        'fibonacci_memoize once for {0} '.format(large_fibonacci))


    print(
        'Calculating fibonacci_old, fibonacci_memoize and '
        'fibonacci_memoize once for {0} '.format(large_fibonacci)
        'to determine speed increase')

The first three work, but the last gives:
        'to determine speed increase')
                                    ^
    SyntaxError: invalid syntax

Not very important, because I can use the second one, but I was just
wondering why it goes wrong.

-- 
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof

[toc] | [next] | [standalone]


#89551

FromDave Angel <davea@davea.name>
Date2015-04-29 09:14 -0400
Message-ID<mailman.86.1430313312.3680.python-list@python.org>
In reply to#89548
On 04/29/2015 08:42 AM, Cecil Westerhof wrote:
> I have the folowing print statements:
>      print(
>          'Calculating fibonacci_old, fibonacci_memoize and '
>          'fibonacci_memoize once for {0} '.format(large_fibonacci))
>
>
>      print(
>          'Calculating fibonacci_old, fibonacci_memoize and '
>          'fibonacci_memoize once for {0} '.format(large_fibonacci) +
>          'to determine speed increase')
>
>      print(
>          'Calculating fibonacci_old, fibonacci_memoize and '
>          'to determine speed increase'
>          'fibonacci_memoize once for {0} '.format(large_fibonacci))
>
>
>      print(
>          'Calculating fibonacci_old, fibonacci_memoize and '
>          'fibonacci_memoize once for {0} '.format(large_fibonacci)
>          'to determine speed increase')
>
> The first three work, but the last gives:
>          'to determine speed increase')
>                                      ^
>      SyntaxError: invalid syntax
>
> Not very important, because I can use the second one, but I was just
> wondering why it goes wrong.
>

Adjacent string literals are concatenated.  But once you've called a 
method (.format()) on that literal, you now have an expression, not a 
string literal.

You could either change the last line to

          + 'to determine speed increase')

or you could concatenate all the strings before calling the format method:


     print(
         'Calculating fibonacci_old, fibonacci_memoize and '
         'fibonacci_memoize once for {0} '
         'to determine speed increase' .format(large_fibonacci))

Something you may not realize is that the addjacent-concatenation occurs 
at compile time, so your third example could be transformed from:

     print(
         'Calculating fibonacci_old, fibonacci_memoize and '
         'to determine speed increase'
         'fibonacci_memoize once for {0} '.format(large_fibonacci))

to:
     print(
         'Calculating fibonacci_old, fibonacci_memoize and '
         'to determine speed increase'
         'fibonacci_memoize once for {0}'
         ' '.format(large_fibonacci))


All three literals are combined before format() is called.  Knowing this 
could be vital if you had {} elsewhere in the 9single) literal.

-- 
DaveA

[toc] | [prev] | [next] | [standalone]


#89553

FromCecil Westerhof <Cecil@decebal.nl>
Date2015-04-29 16:40 +0200
Message-ID<87383jc80w.fsf@Equus.decebal.nl>
In reply to#89551
Op Wednesday 29 Apr 2015 15:14 CEST schreef Dave Angel:

> On 04/29/2015 08:42 AM, Cecil Westerhof wrote:
>> I have the folowing print statements:
>> print(
>> 'Calculating fibonacci_old, fibonacci_memoize and '
>> 'fibonacci_memoize once for {0} '.format(large_fibonacci))
>>
>>
>> print(
>> 'Calculating fibonacci_old, fibonacci_memoize and '
>> 'fibonacci_memoize once for {0} '.format(large_fibonacci) +
>> 'to determine speed increase')
>>
>> print(
>> 'Calculating fibonacci_old, fibonacci_memoize and '
>> 'to determine speed increase'
>> 'fibonacci_memoize once for {0} '.format(large_fibonacci))
>>
>>
>> print(
>> 'Calculating fibonacci_old, fibonacci_memoize and '
>> 'fibonacci_memoize once for {0} '.format(large_fibonacci)
>> 'to determine speed increase')
>>
>> The first three work, but the last gives:
>> 'to determine speed increase')
>> ^
>> SyntaxError: invalid syntax
>>
>> Not very important, because I can use the second one, but I was
>> just wondering why it goes wrong.
>>
>
> Adjacent string literals are concatenated. But once you've called a
> method (.format()) on that literal, you now have an expression, not
> a string literal.
>
> You could either change the last line to
>
> + 'to determine speed increase')
>
> or you could concatenate all the strings before calling the format
> method:
>
>
> print(
> 'Calculating fibonacci_old, fibonacci_memoize and '
> 'fibonacci_memoize once for {0} '
> 'to determine speed increase' .format(large_fibonacci))

I now use this, I did not know that the addjacent-concatenation
occurred at compile time.
I spend a ‘little‘ time, but it was worth it.

From the amount of messages you could think I am a spammer. ;-)

-- 
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof

[toc] | [prev] | [next] | [standalone]


#89557

FromMark Lawrence <breamoreboy@yahoo.co.uk>
Date2015-04-29 17:04 +0100
Message-ID<mailman.87.1430323506.3680.python-list@python.org>
In reply to#89553
On 29/04/2015 15:40, Cecil Westerhof wrote:
> Op Wednesday 29 Apr 2015 15:14 CEST schreef Dave Angel:
>
>> On 04/29/2015 08:42 AM, Cecil Westerhof wrote:
>>> I have the folowing print statements:
>>> print(
>>> 'Calculating fibonacci_old, fibonacci_memoize and'
>>> 'fibonacci_memoize once for {0} '.format(large_fibonacci))
>>>
>>>
>>> print(
>>> 'Calculating fibonacci_old, fibonacci_memoize and'
>>> 'fibonacci_memoize once for {0} '.format(large_fibonacci) +
>>> 'to determine speed increase')
>>>
>>> print(
>>> 'Calculating fibonacci_old, fibonacci_memoize and'
>>> 'to determine speed increase'
>>> 'fibonacci_memoize once for {0} '.format(large_fibonacci))
>>>
>>>
>>> print(
>>> 'Calculating fibonacci_old, fibonacci_memoize and'
>>> 'fibonacci_memoize once for {0} '.format(large_fibonacci)
>>> 'to determine speed increase')
>>>
>>> The first three work, but the last gives:
>>> 'to determine speed increase')
>>> ^
>>> SyntaxError: invalid syntax
>>>
>>> Not very important, because I can use the second one, but I was
>>> just wondering why it goes wrong.
>>>
>>
>> Adjacent string literals are concatenated. But once you've called a
>> method (.format()) on that literal, you now have an expression, not
>> a string literal.
>>
>> You could either change the last line to
>>
>> + 'to determine speed increase')
>>
>> or you could concatenate all the strings before calling the format
>> method:
>>
>>
>> print(
>> 'Calculating fibonacci_old, fibonacci_memoize and'
>> 'fibonacci_memoize once for {0}'
>> 'to determine speed increase' .format(large_fibonacci))
>
> I now use this, I did not know that the addjacent-concatenation
> occurred at compile time.
> I spend a ‘little‘ time, but it was worth it.
>
>  From the amount of messages you could think I am a spammer. ;-)
>

Did you mean spanner? ;-)

-- 
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

[toc] | [prev] | [next] | [standalone]


#89559

FromCecil Westerhof <Cecil@decebal.nl>
Date2015-04-29 19:08 +0200
Message-ID<87twvyc164.fsf@Equus.decebal.nl>
In reply to#89557
Op Wednesday 29 Apr 2015 18:04 CEST schreef Mark Lawrence:

>> From the amount of messages you could think I am a spammer. ;-)
>>
>
> Did you mean spanner? ;-)

My English is not good enough to understand what you mean by this.

-- 
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof

[toc] | [prev] | [next] | [standalone]


#89575

FromMark Lawrence <breamoreboy@yahoo.co.uk>
Date2015-04-29 21:51 +0100
Message-ID<mailman.96.1430340689.3680.python-list@python.org>
In reply to#89559
On 29/04/2015 18:08, Cecil Westerhof wrote:
> Op Wednesday 29 Apr 2015 18:04 CEST schreef Mark Lawrence:
>
>>>  From the amount of messages you could think I am a spammer. ;-)
>>>
>>
>> Did you mean spanner? ;-)
>
> My English is not good enough to understand what you mean by this.
>

Seek, and ye shall find.

<quote>
(UK, mildly derogatory) A stupid or unintelligent person; one prone to 
making mistakes, especially in language.
You spanner, Rodney! I wanted a Chinese, not an Indian!
</quote>

Nothing personal in this, I simply find the homour here often more 
interesting than the theoretical claptrap that some go on about.  Not 
only that, from the Zen of Python, "Practicality beats purity".

As for being a spammer, nonsense, it's rather pleasant to see someone 
with real code asking real questions.  Carry on like this and you'll 
soon be on the bug tracker at bugs.python.org fixing things, instead of 
the throngs who simply love complaining, but in reality do nothing about 
it.  Hint, hint, didn't you ask on another thread about what module you 
could write for Python :)

-- 
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

[toc] | [prev] | [next] | [standalone]


#89583

FromCecil Westerhof <Cecil@decebal.nl>
Date2015-04-29 23:51 +0200
Message-ID<878udabo2s.fsf@Equus.decebal.nl>
In reply to#89575
Op Wednesday 29 Apr 2015 22:51 CEST schreef Mark Lawrence:

> On 29/04/2015 18:08, Cecil Westerhof wrote:
>> Op Wednesday 29 Apr 2015 18:04 CEST schreef Mark Lawrence:
>>
>>>> From the amount of messages you could think I am a spammer. ;-)
>>>>
>>>
>>> Did you mean spanner? ;-)
>>
>> My English is not good enough to understand what you mean by this.
>>
>
> Seek, and ye shall find.
>
> <quote> (UK, mildly derogatory) A stupid or unintelligent person;
> one prone to making mistakes, especially in language. You spanner,
> Rodney! I wanted a Chinese, not an Indian! </quote>

Well, I used Google (or rather DuckDuckGo) and did not find this one.


> Nothing personal in this, I simply find the homour here often more
> interesting than the theoretical claptrap that some go on about. Not
> only that, from the Zen of Python, "Practicality beats purity".

:-)


> As for being a spammer, nonsense, it's rather pleasant to see
> someone with real code asking real questions. Carry on like this and
> you'll soon be on the bug tracker at bugs.python.org fixing things,
> instead of the throngs who simply love complaining, but in reality
> do nothing about it. Hint, hint, didn't you ask on another thread
> about what module you could write for Python :)

Fixing bugs is even better as writing modules. I would not mind if you
would be right. :-D

-- 
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web