[英]How to use any function by a decorator regardless of its arguments in Python
我正在尋找一個函數,它將返回執行任何其他函數所需的時間(也許它可以用一個庫來完成,但原則上我希望在本地實現它)。 我希望以本機方式實現它),先驗它似乎很容易,它可以使用裝飾器或通過參數接收函數的經典函數來完成:
def get_function_time(function):
start_time = time.time()
function()
return time.time() - start_time
當然,這只適用於沒有參數的函數,在這種情況下,我們可以告訴它為函數傳遞參數:
def get_function_time(function, parameter):
start_time = time.time()
function(parameter)
return time.time() - start_time
在這里,當調用參數多於或少於一個的函數時,我們會遇到同樣的問題。 然后我的疑問就來了,有沒有一種方法可以使用裝飾器或沒有裝飾器,根據元素的數量我在函數中發送相同數量的參數。
對於我需要做的一些測試,我實現了這個糟糕的解決方案,考慮到我沒有超過 5 個參數的函數。 超過 5 個 argmuentos 的功能為我服務。
def get_function_time(function, parameters: list):
start = time.time()
parameters_num = len(parameters)
if len(parameters) > 6: raise ValueError("Max 5 arguments")
if parameters_num == 0:
function()
elif parameters_num == 1:
function(parameters[0])
elif parameters_num == 2:
function(parameters[0], parameters[1])
elif parameters_num == 3:
function(parameters[0], parameters[1], parameters[2])
elif parameters_num == 4:
function(parameters[0], parameters[1], parameters[2], parameters[3])
elif parameters_num == 5:
function(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4])
return time.time() - start
但是我留下了一個問題,即如何以動態的方式來測量任何函數,不管它的參數是什么(當然,只要它們很好地傳遞了它們的參數)。
抱歉,如果寫問題的方式不是最好的,我在這里沒有太多經驗。
如果我猜對了,您需要的是*args
和**kwargs
,這意味着按順序的參數和按關鍵字的參數。
例如
def get_function_time(function, *args, **kwargs):
start = time.time()
function(*args, **kwargs)
return time.time() - start
那么你可以像這樣使用它
get_function_time(function, 'abc', 'def', keyword1='ghi', keyword2='jkl')
這相當於調用function
function('abc', 'def', keyword1='ghi', keyword2='jkl')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.