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

2番目のコードスニペットが壊れているとはどういう意味ですか? – user2357112

+0

あなたは正しいです。それは動作します。私のreplに問題がありました。私がipythonに貼り付けたとき、それは返品について不平を言った。私はジェネレータを理解していなかったためだと思っていましたが、実際は空白のエラーでした。同じ問題を抱えている人は、ipythonで%pasteマクロを使用してください。 – user514156

答えて

-1

ジェネレータに開始時刻を渡す必要はありません。最初の行にはstart = time.time()を置いてそのまま残ります

+0

これは、ジェネレータが作成されたときではなく、最初の 'next'コールで' start'が計算されるようにします。 – user2357112

関連する問題