2017-08-19 26 views
0

我有這個工作計時器功能在python ver3.6運行間隔2秒。更改此計時器功能接受參數

def timer_function_working(): 
    threading.Timer(2, timer_function_working).start() 
    print ("stackoverflow") 

timer_function_working() 

我想這個timer_function接受時間間隔作爲參數。這是新的代碼;

def timer_function(interval_sec): 
    threading.Timer(interval_sec, timer_function).start() 
    print ("stackoverflow") 

timer_function(interval_sec=2) 

但是,我收到此錯誤消息;

TypeError: timer_function() missing 1 required positional argument: 'interval_sec' 

如何更改此計時器功能以接受參數?

回答

1

按照docs for threading.Timer,第一個參數是Timerinterval

class threading.Timer(interval, function, args=[], kwargs={})

在你的第二個代碼塊,在第一次執行,因爲你已經爲interval提供的值沒有問題運行。然而,當functionTimer的持續時間結束時被調用時,你不傳遞任何參數的函數本身,從而導致錯誤:

TypeError: timer_function() takes exactly 1 argument (0 given) 

你可以傳遞參數給函數該Timer以下面的方式完成時調用:

import threading 


def timer_function(interval_sec): 
    threading.Timer(interval_sec, timer_function, args=[interval_sec]).start() 
    print ("stackoverflow") 


timer_function(interval_sec=2) 

備選地,可以使用一個封閉件來值interval_sec綁定到另一個功能,內timer_function定義可以在沒有任何參數調用:

def timer_function(interval_sec): 
    def inner_function(): 
     return timer_function(interval_sec) 
    threading.Timer(interval_sec, inner_function).start() 
    print ("stackoverflow") 


timer_function(interval_sec=2)