(Feb-23-2017, 03:53 PM)micseydel Wrote: @Ofnuts, given the advice at https://wiki.python.org/moin/PythonSpeed...iding_dots... and my inability to find anything saying that CPython does any kind of optimization, I'm really doubtful of that. PyPy very well could.
OK, so some experimental evidence that you are right:
import timeit,random class Counter(object): def __init__(self): self.someattribute=0 def runAttrib1(self,runs): self.someattribute=0 x=random.randint(1,10) for _ in range(runs): self.someattribute+=x return self.someattribute def runAttrib2(self,runs): self.someattribute=0 x=random.randint(1,10) for _ in range(runs): self.someattribute=self.someattribute+x return self.someattribute def runLocal(self,runs): self.someattribute=0 attribcopy=self.someattribute x=random.randint(1,10) for _ in range(runs): attribcopy+=x self.someattribute=attribcopy return x counter=Counter() number=1000 print ("%12s: %12.8f" % ('Attrib1',timeit.timeit(stmt='counter.runAttrib1(100000)',setup='from __main__ import counter', number=number))) print ("%12s: %12.8f" % ('Attrib2',timeit.timeit(stmt='counter.runAttrib2(100000)',setup='from __main__ import counter', number=number))) print ("%12s: %12.8f" % ('Local', timeit.timeit(stmt='counter.runLocal(100000)', setup='from __main__ import counter', number=number)))Output for Python2:
Output: Attrib1: 10.37185884
Attrib2: 8.38905406
Local: 5.44241190
Output for Python3:Output: Attrib1: 9.38220573
Attrib2: 8.99003031
Local: 4.89760979
So yes, some optimizations aren't done. Strangely var+=x
(Attrib1) is slower than var=var+x
(Attrib2)...
Unless noted otherwise, code in my posts should be understood as "coding suggestions", and its use may require more neurones than the two necessary for Ctrl-C/Ctrl-V.
Your one-stop place for all your GIMP needs: gimp-forum.net
Your one-stop place for all your GIMP needs: gimp-forum.net