2016-11-30 20 views
2

次のプログラムはhello worldを1回だけ印刷します。代わりに5秒ごとに文字列を出力する必要があります。タイマーはPythonで1回だけ実行されます

ただし、次のプログラムは5秒ごとに文字列を出力します。

def foo(): 
    print("World"); 
    Timer(5.0, foo).start(); 

foo(); 

         (program - 2) 

なぜ(プログラム-1)5秒ごとに文字列を印刷しないのですか?そして、(プログラム-1)を5秒ごとに連続して印刷する方法。

+0

なぜあなたは余分なクラスでそれをラップして始めますか?これは必要ですか? – nlsdfnbch

答えて

1

(program - 2)は、再帰的に自身を呼び出しているため、5秒ごとに文字列を出力します。お分かりのように、foo()は内部で機能していますが、これは動作する理由です。

あなたは内のすべての5秒の文字列を印刷する場合(プログラム - 1)あなたができたクラスを使用して(それは本当に良い練習ではありません!):

from threading import Timer 

class TestTimer: 
    def boo(self): 
     print("World") 
     Timer(1.0, self.boo).start() 

timer = TestTimer() 
timer.boo() 
0

、あなたが指摘したように「foo()再帰的に呼び出して再:あなたの質問に

def foo(): 
    print("World"); 
    Timer(5.0, foo).start(); # Calls foo() again after 5s and so on 

foo(); 

、あなたはthreading.Timer周りのラッパーを作成しました - 私はあなたが単にそれをサブクラス勧め:

from threading import Timer 

class TestTimer(Timer): 

    def __init__(self, i): 
     self.running = False 
     super(TestTimer, self).__init__(i, self.boo) 

    def boo(self): 
     print("Hello World") 

    def stop(): 
     self.running = False 
     super(TestTimer, self).stop() 

    def start(): 
     self.running = True 
     while self.running: 
      super(TestTimer, self).start() 

t = TestTimer(5) 
t.start() 
関連する問題