如果你可以犧牲具有numberOfExecTime
參數默認值的能力,你可以這樣做:
from timeit import Timer
from functools import partial
def get_execution_time(function, numberOfExecTime, *args, **kwargs):
"""Return the execution time of a function in seconds."""
return round(Timer(partial(function, *args, **kwargs))
.timeit(numberOfExecTime), 5)
def foo(a, b, c = 12):
print a, b, c
get_execution_time(foo, 1, 3, 4, c = 14)
或者你也可以那樣做,仍然有默認值numberOfExecTime
:
from timeit import Timer
from functools import partial
def get_execution_time(function, *args, **kwargs):
"""Return the execution time of a function in seconds."""
numberOfExecTime = kwargs.pop('numberOfExecTime', 1)
return round(Timer(partial(function, *args, **kwargs))
.timeit(numberOfExecTime), 5)
def foo(a, b, c = 1):
print a, b, c
get_execution_time(foo, 1, 2, c = 2)
# => 1 2 2
get_execution_time(foo, 4, 5, c = 3, numberOfExecTime = 2)
# => 4 5 3
# => 4 5 3
這是使用現有代碼的最佳答案。但是,如果您希望更多地控制您收到的數據,@ KL-7具有更強大的表現力。 – Edwin
我猶豫要發佈與KL-7所提議的相同的提案(除了我發佈的提案之外),但在我眼中,我最終決定發佈的版本是最好的版本,因爲此函數的調用更直接,因爲沒有將哪個傳遞的參數傳遞給函數以及哪個是方法本身的參數的歧義... – gecco
這就是爲什麼我說它具有*更具表現力*。我從來沒有說過哪個答案是最好的,因爲它取決於提問者想要的東西。 – Edwin