On 12/03/2016 10:06, alister wrote:
On Fri, 11 Mar 2016 22:24:45 +0000, BartC wrote:

On 11/03/2016 21:59, Mark Lawrence wrote:
On 11/03/2016 18:57, BartC wrote:

def test():
      s=""
      for i in range(10000000):
          s+="*"
      print (len(s))

test()

The minor snag that you might like to correct with your microbenchmark,
which any experienced Python programmer knows, is that you *NEVER,
EVER*
create strings like this.

Why not? Chris said his version runs much faster (even allowing for
different machines), and might have a special optimisation for it.

And I think it can be optimised if, for example, there are no other
references to the string that s refers to.

So what's wrong with trying to fix it rather that using a workaround?

because the "workarround" is not a workarround it is the correct way to
do it
the code above is a workarround for somone who does not know the pythonic
method to do this

S= "*"*10000000

This is a benchmark that measures the cost of adding to a string a character at a time.

In practice the final length of the string is not known, and the characters added at each stage are not known.

Although the strings won't usually be that big; the benchmark exaggerates here to highlight a possible issue with += on strings. And it worked, as there can be big difference with or without the += optimisation in place.

It also showed a possible bug or problem with PyPy.

You can't demonstrate all this by just writing s="*"*10000000.

--
Bartc
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to