簡體   English   中英

運行時間檢查功能

[英]run time check function

我知道我可以使用時間模塊來跟蹤代碼的運行時間:

例如,如果我具有遞歸的斐波那契函數

def fib_gen_r(i):
    """
    Fibonacci function generator
    generate the fibonacci number at 'i'th posistion
    """
    if i == 0:
        return 0
    elif i == 1:
        return 1
    else:
        return fib_gen_r(i - 1) + fib_gen_r(i - 2)

我可以做這個:

import time
start_time = time.time()
print(fib_gen_r(35))
print(f"--- {time.time() - start_time}s seconds ---\n")
# >>> 
# 9227465
# --- 2.556117296218872s seconds ---

但是,如果我不想每次都寫這個,我寫了一個函數:

def time_spend(code_to_check):
    import time
    start_time = time.time()
    print(code_to_check)
    print(f"--- {time.time() - start_time}s seconds ---\n")

time_spend(fib_gen_r(35))
# >>>
# check run-time:
# 9227465
# --- 0.0s seconds ---

不知何故,它沒有讀取運行時,我做錯了什么?

謝謝,

你在呼喚你的fib_gen_r調用之前函數time_spend 相反,您必須將實際函數作為參數傳遞,而無需調用它,而必須在time_spend內部調用它。

此代碼time_spend(fib_gen_r(35))首先調用fib_gen_r ,完成后將結果傳遞給time_spend 不是您想要的,因為您無法衡量已經完成的事情。 相反,您想使用這種語法time_spend(fib_gen_r, 35)來傳遞實際的函數對象作為參數, 而無需調用它 ,因此可以在函數內部調用它

def time_spend(code_to_check, *args, **kwds):
    import time
    start_time = time.time()
    result = code_to_check(*args, **kwds)
    print(f"--- {time.time() - start_time}s seconds ---\n")
    return result


time_spend(fib_gen_r, 35)

一個更簡單的替代方法是使用上下文管理器( with語句):

import contextlib

@contextlib.contextmanager
def time_spend():
    import time
    start_time = time.time()
    yield
    print(f"--- {time.time() - start_time}s seconds ---\n")

然后,您可以像這樣使用它:

with time_spend():
    fib_gen_r(35)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM