2016-12-06 1 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

아, 맞습니다. 그것은 효과가있다. 내 repl에 문제가있었습니다. ipython에 붙여 넣을 때 반환에 대해 불평했습니다. 나는 발전기를 이해하지 못했기 때문에 이것이라고 생각했지만 실제로는 공백 오류였다. 같은 문제가있는 사람이라면 ipython에서 % paste 매크로를 사용하십시오. – user514156

답변

-1

발전기에 시작 시간을 전달할 필요가 없습니다. 첫 번째 줄에 start = time.time()을하고 나머지는 그대로 두십시오.

+0

이렇게하면 생성기가 생성 될 때가 아니라 첫 번째'next' 호출에서'start'가 계산됩니다. – user2357112