2016-11-24 161 views
2

如何將參數傳遞給schedule按參數傳遞參數

我希望函數被調用:

def job(param1, param2): 
    print(str(param1) + str(param2)) 

我如何安排它:

schedule.every(10).minutes.do(job) 

如何傳遞參數給do(job)

回答

3

一般有這樣的事情,你總是可以做到這一點:

schedule.every(10).minutes.do(lambda: job('Hello ', 'world!')) 

查看源:

def do(self, job_func, *args, **kwargs): 
    """Specifies the job_func that should be called every time the 
    job runs. 
    Any additional arguments are passed on to job_func when 
    the job runs. 
    :param job_func: The function to be scheduled 
    :return: The invoked job instance 
    """ 
    self.job_func = functools.partial(job_func, *args, **kwargs) 

我們看到,你也可以這樣做:

schedule.every(10).minutes.do(job, 'Hello ', 'world!') 

或者,如代碼所示,通用lambda方法的替代方法是:

schedule.every(10).minutes.do(functools.partial(job, 'Hello ', 'world!')) 
+0

謝謝你的幫助。我新使用lamda函數,你能告訴我如何使用它以及何時使用它?我用do(job(param1,param2)),但它是錯誤的。做什麼(job(param1,param2))和do(lambda:job('Hello','world!'))有什麼不同?謝謝 –

+0

'lambda:...'返回一個沒有參數的函數,類似於'def function_name():return ...',但它可以讓你縮短代碼長度。 'do(job(param1,param2))'立即調用'job(param1,param2)'並將結果傳遞給'do',這是沒有意義的。 –

+0

是否像在Java或C#中返回void函數?所以它不會返回任何東西? –