Global VS Local Subroutines

Rob Cliffe rob.cliffe at btinternet.com
Thu Feb 10 11:52:00 EST 2022



On 10/02/2022 12:13, BlindAnagram wrote:
> Is there any difference in performance between these two program layouts:
>
>    def a():
>      ...
>    def(b):
>      c = a(b)
>
> or
>
>    def(b):
>      def a():
>        ...
>      c = a(b)
>
> I would appreciate any insights on which layout to choose in which 
> circumstances.
>
The way to answer questions about performance is not to guess (often 
difficult or impossible), but to measure.  Profiling tools are available 
to see where a program spends how much of its time.  But a simpler 
approach might be to try to run the guts of your program 1000 or 1000000 
times, and find how long it takes with each layout (not with a stopwatch 
😁 but getting the program to record the start time, end time and the 
difference).
That said, I will venture a guess (or at least, an observation):
     def a():
         ...
is executable code.  It creates the function `a` which did not exist 
before (or creates the new version if it did).  This takes a certain 
amount of time.  In your 2nd layout, this overhead occurs every time b() 
is called.  So I would *guess* that this would be slower.  Of course it 
depends on how many times b() is called and probably on lots of other 
things.

But of course, performance is not the only consideration, as per Chris 
Angelico's answer.
Best wishes
Rob Cliffe


More information about the Python-list mailing list