简体   繁体   中英

Why a procedure is so much faster when put into a function?

Here is what I did, I created 2 procedures, one in a function and one in the python file itself. The one on the python file itself run almost 2 times slower even if it's exactly the same. WHY?

Bellow is an example with 2 procedures that are just loops on P element

I have the following python file:

from time import *
P=1000000 #range of the 2 loops

def loop(N):
        for k in range(N):
                continue

start=time()
loop(P)
stop1=time()
for k in range(P):
            continue
stop2=time()
print "time with function ",stop1-start
print "time without function ",stop2-stop1

Here is what I get (I tried it with one thousand samples and the result is the following):

time with function  0.0950000286102
time without function  0.15700006485

with xrange instead of range I get:

time with function  0.0460000038147
time without function  0.107999843597

So it's like 0.05 second in used to build the list

I know it's may be a useless question, but If someone know why is this going so much faster I would be happy to know

The only significant difference is that the version in the function is only updating the local variable for that function, whereas the version not in a function is updating a global variable k .

As mentioned here :

The final speedup available to us for the non-map version of the for loop is to use local variables wherever possible. If the above loop is cast as a function, append and upper become local variables. Python accesses local variables much more efficiently than global variables.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM