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