Same function but different names with different set of default arguments
Steven D'Aprano
steve at pearwood.info
Thu Jan 21 07:24:23 EST 2016
On Thu, 21 Jan 2016 06:30 pm, Paulo da Silva wrote:
> Hi all.
>
> What is the fastest implementation of the following code?
Let's find out. Here are three different ways to do it:
def g(p):
return
def f1(p=3): # argument with a default
return g(p)
def f2(): # no argument at all
return g(3)
from functools import partial
f3 = partial(g, 3)
# setup timing code
from timeit import Timer
t1 = Timer("f1()", "from __main__ import f1")
t2 = Timer("f2()", "from __main__ import f2")
t3 = Timer("f3()", "from __main__ import f3")
Now let's see how long they take. This is using Python 2.7 on my computer.
py> min(t1.repeat(repeat=7))
0.43099188804626465
py> min(t1.repeat(repeat=7))
0.4344518184661865
py> min(t1.repeat(repeat=7))
0.42992687225341797
py> min(t2.repeat(repeat=7))
0.43400001525878906
py> min(t2.repeat(repeat=7))
0.432689905166626
py> min(t2.repeat(repeat=7))
0.43417787551879883
py> min(t3.repeat(repeat=7))
0.281879186630249
py> min(t3.repeat(repeat=7))
0.27957892417907715
py> min(t3.repeat(repeat=7))
0.28043699264526367
There's no visible difference between the first and second method. The third
method, using functools.partial, is considerably faster, BUT remember that
this only effects the time it takes to call the function g(). If g()
actually does any work, the time spent doing the work will *far* outweigh
the overhead of calling the function.
--
Steven
More information about the Python-list
mailing list