Hi Folks, I was arguing with a guy who was sure that incrementing a variable i with "i += 1" is faster than "i = i + 1". I couldn't tell if he was right or wrong so I did a little benchmark with the very useful timeit module. Here are the results on my little Linux Eeepc Netbook (using Python 3.2):
Computing, please wait... Results for 1000000 times "i = i + 1": 0.37591004371643066 0.3827171325683594 0.37238597869873047 0.37305116653442383 0.3725881576538086 0.37294602394104004 0.3712761402130127 0.37357497215270996 0.371567964553833 0.37359118461608887 Total 3.7396 seconds. Results for 1000000 times "i += 1": 0.3821070194244385 0.3802030086517334 0.3828878402709961 0.3823058605194092 0.3801591396331787 0.38340115547180176 0.3795340061187744 0.38153910636901855 0.3835160732269287 0.381864070892334 Total 3.8175 seconds. ==> "i = i + 1" is 2.08% faster than "i += 1". I did many tests and "i = i + 1" always seems to be around 2% faster than "i += 1". This is no surprise as the += notation seems to be a syntaxic sugar layer that has to be converted to i = i + 1 anyway. Am I wrong in my interpretation? Btw here's the trivial Python 3.2 script I made for this benchmark: import timeit r = 10 n = 1000000 s1 = "i = i + 1" s2 = "i += 1" t1 = timeit.Timer(stmt=s1, setup="i = 0") t2 = timeit.Timer(stmt=s2, setup="i = 0") print("Computing, please wait...") results1 = t1.repeat(repeat=r, number=n) results2 = t2.repeat(repeat=r, number=n) print('\nResults for {} times "{}":'.format(n, s1)) sum1 = 0 for result in results1: print(result) sum1 += result print("Total {:.5} seconds.".format(sum1)) print('\nResults for {} times "{}":'.format(n, s2)) sum2 = 0 for result in results2: print(result) sum2 += result print("Total {:.5} seconds.".format(sum2)) print('\n==> "{}" is {:.3}% faster than "{}".'.format(s1,(sum2 / sum1) * 100 - 100, s2)) Comments are welcome... -- http://mail.python.org/mailman/listinfo/python-list