2016-12-06 4 views
0

Я написал фрагмент, который использует генераторы для возврата прошедшего времени с момента последнего вызова.Возврат генератора питона для анализа времени

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, он пожаловался на возвращение. Я думал, что это потому, что я не понял генераторов, но на самом деле это была просто ошибка в пробеле. Для тех, кто имеет такую ​​же проблему, используйте макрос% paste в ipython. – user514156

ответ

-1

Вам не обязательно передавать время старта генератору. Вы можете просто сделать start = time.time() в своей первой строке, а остальные оставить как есть

+0

Это приводит к тому, что 'start' вычисляется при первом вызове' next', а не при создании генератора. – user2357112

Смежные вопросы