Why a procedure is so much faster when put into a function?
Question: 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


Answer: 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](http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Local_Variables):

> 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.**

