I guess everyone knows that:
Python accesses local variables much more efficiently than global variables
Ok, it's true:
oldlist = [str(i) for i in range(500)]
oldlist1 = [i for i in range(500)]
%%timeit
newlist = []
for word in oldlist:
newlist.append(word.upper())
10000 loops, best of 3: 178 µs per loop
%%timeit
def func():
newlist = []
for word in oldlist:
newlist.append(word.upper())
return newlist
newlist = func()
10000 loops, best of 3: 93.2 µs per loop
Unfortunately, looks like it isn't global rule but special case:
%%timeit
newlist = []
for nr in oldlist1:
newlist.append(nr * nr)
10000 loops, best of 3: 60.3 µs per loop
%%timeit
def func():
newlist = []
for nr in oldlist1:
newlist.append(nr * nr)
return newlist
newlist = func()
10000 loops, best of 3: 60.5 µs per loop
How can these tests be explained ?