2016-12-06 29 views
0

我寫了一個代碼片斷,它使用生成器返回自上次調用以來的經過時間。返回python生成器進行時序分析

def time_gen(start_time): 
    start = start_time 
    while True: 
     elapsed = time.time() - start 
     start = time.time() 
     yield elapsed 

def test(): 
    a = time_gen(time.time()) 
    for i in range(4): 
     time.sleep(1) 
     print(a.next()) #prints about 1 second 

它似乎運作良好。但我不喜歡用戶需要在開始時間通過的方式。有沒有辦法寫一個函數返回一個生成器的開始時間已經作爲參數傳遞?

#Broken Code 
def time_closure(): 
    def time_gen(start_time): 
     start = start_time 
     while True: 
      elapsed = time.time() - start 
      start = time.time() 
      yield elapsed 

    a = time_gen(time.time()) 
    return a 

#Usage of Broken Code 
a = time_closure() 
a.next() 
+0

您爲什麼說第二個代碼段已損壞? – user2357112

+0

哦,你是對的。它確實有效。我的代表有一個問題。當我將它粘貼到ipython時,它抱怨返回。我認爲這是因爲我不瞭解生成器,但實際上它只是一個空白錯誤。對於任何有相同問題的人,請在ipython中使用%paste宏。 – user514156

回答

-1

您不必將開始時間傳遞給生成器。您可以在其第一行中執行start = time.time(),然後保持原樣

+0

這會導致在第一次「next」調用時計算「start」,而不是在創建生成器時計算。 – user2357112