Python 将此计时器函数更改为接受参数
我在PythonVer3.6中有一个工作计时器函数,它以2秒的间隔运行Python 将此计时器函数更改为接受参数,python,python-3.x,timer,Python,Python 3.x,Timer,我在PythonVer3.6中有一个工作计时器函数,它以2秒的间隔运行 def timer_function_working(): threading.Timer(2, timer_function_working).start() print ("stackoverflow") timer_function_working() 我希望这个timer_函数接受时间间隔作为参数。这是新代码 def timer_function(interval_sec): thread
def timer_function_working():
threading.Timer(2, timer_function_working).start()
print ("stackoverflow")
timer_function_working()
我希望这个timer_函数接受时间间隔作为参数。这是新代码
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'
如何将此计时器函数更改为接受参数?根据,计时器的第一个参数是interval
class threading.Timer(间隔、函数、args=[],kwargs={})
在第二个代码块中,第一次执行不会出现问题,因为您为interval
提供了一个值。但是,当在计时器
持续时间结束时调用函数
时,您不会向函数本身传递任何参数,这会导致错误:
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)
根据,计时器的第一个参数是interval
class threading.Timer(间隔、函数、args=[],kwargs={})
在第二个代码块中,第一次执行不会出现问题,因为您为interval
提供了一个值。但是,当在计时器
持续时间结束时调用函数
时,您不会向函数本身传递任何参数,这会导致错误:
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)